我正在创建一个简单的Sprite Kit游戏,但是当我将PhysicsBody添加到我的一个精灵中时,它似乎处于错误的位置。我知道它处于错误的位置,因为我已经设定了
skView.showsPhysics = YES;
它出现在错误的位置。
底角的广场是第一个半圆的物理体。我目前正在使用正方形进行测试。
我的应用程序包含以下视图,并在移动时跟随我的主精灵。我通过遵循apples文档并创建一个'myworld'节点并从该节点创建所有其他节点来实现这一点。
myWorld = [SKNode node];
[self addChild:myWorld];
semicircle = [SKSpriteNode spriteNodeWithImageNamed:@"SEMICRICLE.png"];
semicircle.size = CGSizeMake(semicircle.frame.size.width/10, semicircle.frame.size.height/10);
semicircle.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:semicircle.frame.size];
semicircle.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
semicircle.physicsBody.dynamic = YES;
semicircle.physicsBody.collisionBitMask = 0;
semicircle.name = @"semicircle";
[myWorld addChild:semicircle];
以我称之为节点的节点为中心
- (void)didSimulatePhysics
{
[self centerOnNode: [self childNodeWithName: @"//mainball"]];
}
- (void) centerOnNode: (SKNode *) node
{
CGPoint cameraPositionInScene = [node.scene convertPoint:node.position fromNode:node.parent];
node.parent.position = CGPointMake(node.parent.position.x - cameraPositionInScene.x, node.parent.position.y - cameraPositionInScene.y);
}
我不知道我的世界是否对SkPhysics团体有任何影响......
答案 0 :(得分:2)
SKPhysicsBody从位于左下角的坐标0,0开始。如果你按照宽度/ 10和高度/ 10来缩小面积,则可以减小尺寸,但是从左下角开始。
我认为您正在寻找的是bodyWithRectangleOfSize:center:,它允许您手动设置物理身体区域所在的中心。
<强>更新强>
根据我的理解,您最小的半圆形图片尺寸与屏幕尺寸相同。我建议你修改图像大小,就像我的例子。然后,您可以根据需要设置精灵的位置,并将物理主体设置为包含半圆的图像的一半。
答案 1 :(得分:0)
您的centerOnNode调用应该放在didEvaluateActions函数中,而不是didSimulatePhysics函数中。这是因为你需要在物理绘制之前移动世界,以便它们保持同步。类似的问题在这里找到:https://stackoverflow.com/a/24804793/5062806