SKPhysicBody在错误的位置

时间:2014-04-05 00:17:52

标签: ios sprite-kit skphysicsbody

我正在创建一个简单的Sprite Kit游戏,但是当我将PhysicsBody添加到我的一个精灵中时,它似乎处于错误的位置。我知道它处于错误的位置,因为我已经设定了 skView.showsPhysics = YES; 它出现在错误的位置。

enter image description here

底角的广场是第一个半圆的物理体。我目前正在使用正方形进行测试。

我的应用程序包含以下视图,并在移动时跟随我的主精灵。我通过遵循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团体有任何影响......

2 个答案:

答案 0 :(得分:2)

SKPhysicsBody从位于左下角的坐标0,0开始。如果你按照宽度/ 10和高度/ 10来缩小面积,则可以减小尺寸,但是从左下角开始。

我认为您正在寻找的是bodyWithRectangleOfSize:center:,它允许您手动设置物理身体区域所在的中心。

<强>更新

根据我的理解,您最小的半圆形图片尺寸与屏幕尺寸相同。我建议你修改图像大小,就像我的例子。然后,您可以根据需要设置精灵的位置,并将物理主体设置为包含半圆的图像的一半。 enter image description here

答案 1 :(得分:0)

您的centerOnNode调用应该放在didEvaluateActions函数中,而不是didSimulatePhysics函数中。这是因为你需要在物理绘制之前移动世界,以便它们保持同步。类似的问题在这里找到:https://stackoverflow.com/a/24804793/5062806