Jas*_*ell 32 ios sprite-kit skphysicsbody
我的场景有一堆矩形,物理体与矩形大小相同.我喜欢将我的所有物体锚定到CGPointZero,但是我注意到当我这样做时,物理体仍然固定在中间.换句话说,我的物理体的位置就像是视觉表示的左下方100像素.
这是一段简单的代码:
SKSpriteNode* square = [SKSpriteNode spriteNodeWithColor:[SKColor blackColor] size:CGSizeMake(width, height)];
square.anchorPoint = CGPointZero; //position based on bottom-left corner
square.position = CGPointMake(x, y);
square.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(width, height)];
Run Code Online (Sandbox Code Playgroud)
任何想法或建议解决这个问题将不胜感激.例如,如果我可以想象物理机构,这可能有所帮助,但我不知道如何.
更新:所以我通过简单地设置锚点并重新定位我的矩形来解决问题.所以这个问题仍然存在,但我已经有了解决方案并且工作正常.
bsh*_*ley 13
我这样写是为了解决Apple缺乏的问题:
用pathForRectangleOfSize:withAnchorPoint:
更换您的来电bodyWithRectangleOfSize:
,其短暂的文档告诉我们这个问题:"创建集中在拥有节点的原点的矩形的物理身体."
@implementation SKPhysicsBody (CWAdditions)
+ (CGPathRef)pathForRectangleOfSize:(CGSize)size withAnchorPoint:(CGPoint)anchor {
CGPathRef path = CGPathCreateWithRect( CGRectMake(-size.width * anchor.x, -size.height * anchor.y,
size.width, size.height), nil);
return path;
}
+ (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)size withAnchorPoint:(CGPoint)anchor {
CGPathRef path = [self pathForRectangleOfSize:size withAnchorPoint:anchor];
return [self bodyWithPolygonFromPath:path];
}
@end
Run Code Online (Sandbox Code Playgroud)
编辑:7.1中有一个新的API来提供这种疏忽.
+ (SKPhysicsBody *)bodyWithRectangleOfSize:(CGSize)s center:(CGPoint)center
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以使用
[SKPhysicsBody bodyWithRectangleOfSize:size center: center];
CGPoint center = CGPointMake(size.width*(anchorPoint.x-0.5f), size.height*(0.5f-anchorPoint.y))
Run Code Online (Sandbox Code Playgroud)
应该根据父节点的anchorPoint变换边界框
小智 6
我正在使用 Swift,但SKPhysicsBody
半宽和半高是错误的。我正在使用锚点(0,0)。然后我用的方法rectangleOfSize
,center
:
var cc = SKSpriteNode(color: UIColor.greenColor(), size: CGSizeMake(32, 64))
cc.physicsBody = SKPhysicsBody(rectangleOfSize: cc.size, center: CGPointMake(32/2, 64/2))
Run Code Online (Sandbox Code Playgroud)
我希望它也适用于你们……谢谢!
只有在设置 spriteNode 的位置时才需要 anchorPoint。我不太明白为什么你需要将physicsBody(我假设它与节点的大小相同)移动到一个角落......但是你可能会发现这个类方法[SKPhysicsBody bodyWithPolygonFromPath:path]很有用。
这是一个很好的生成器:http : //dazchong.com/spritekit/
归档时间: |
|
查看次数: |
6883 次 |
最近记录: |