【问题标题】:SKPhysicBody In the Wrong positionSKPhysicBody 位置错误
【发布时间】:2014-04-05 00:17:52
【问题描述】:

我正在创建一个简单的 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 身体有什么影响...

【问题讨论】:

    标签: ios sprite-kit skphysicsbody


    【解决方案1】:

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

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

    更新:

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

    【讨论】:

    • 所以我按照你说的做了,它确实将物理体移动到了正确的位置......但是在这个游戏中,当你按住底部的按钮时,所有的半圆都会旋转。当你旋转半圆时,物理体似乎在拐角处的旧区域运行,而不是原地旋转。我认为这个问题与下面的视图有关,因为我做了一个完全相同的测试项目不要使用我的世界观跟随事物,它工作得很好。
    • 不知道该怎么做。您的物理体是对象的一部分,因此它只能按照对象的方式移动...中心半圆是独立对象还是旋转的背景图片的一部分?
    • 是的,这很难解释...是的,半圆是一个独立的对象,就像图片中的所有半圆一样...我想重新启动这个项目并尝试对其进行编码不同
    • 不要放弃。尝试所有你能想到的。确保你的物理体定义的中心点实际上位于精灵的中心,否则它将围绕中心运行。另外,如果半圆是独立的,我想知道为什么你的矩形物理体在左下角。你的半圆形精灵是你屏幕的大小吗?
    • 是的,我使用了相当大的半圆形图像,并将其缩小很多以适应屏幕。我现在已经在另一个程序中缩小了图像的大小,现在它已经是适合屏幕的大小了。 Xcode 中没有缩小比例,但我仍然遇到同样的问题。你说要确保中心点是精灵的中心。我使用了bodywithrectangleofsize: centre的方法并将中心设置为semicircle.position...这是正确的
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-18
      • 1970-01-01
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      相关资源
      最近更新 更多