0

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

在此处输入图像描述

底角的正方形是第一个半圆的物理体。我现在使用正方形只是为了测试目的。

我的应用程序包括视图跟随并在移动时跟随我的主要精灵。我通过遵循苹果文档并创建一个“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 的身体有什么影响……

4

2 回答 2

2

SKPhysicsBody 从左下角的坐标 0,0 开始。如果您使区域变小,就像您通过宽度/10 和高度/10 所做的那样,您会减小尺寸,但从左下角开始。

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

更新:

据我了解,您最小的半圆形图片尺寸与屏幕尺寸相同。我建议您将图像大小修改为类似于我的示例。然后,您可以根据需要设置精灵的位置,并将物理主体设置为包含半圆的图像的一半。 在此处输入图像描述

于 2014-04-05T00:31:35.883 回答
0

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

于 2015-08-22T00:16:48.393 回答