【问题标题】:Incorrect work of SKPhysicsBody with moved SKSpriteNode anchorPoint?SKPhysicsBody 与移动的 SKSpriteNode 锚点的工作不正确?
【发布时间】:2014-03-01 19:41:14
【问题描述】:

这是我的代码:

    // setting background
_ground = [[SKSpriteNode alloc]
                         initWithColor:[SKColor greenColor]
                                  size:CGSizeMake([Helpers landscapeScreenSize].width, 50)];
_ground.name = @"ground";
_ground.zPosition = 1;
_ground.anchorPoint = CGPointMake(0, 0);
_ground.position = CGPointMake(0, 0);
_ground.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake([Helpers landscapeScreenSize].width, 50)];
_ground.physicsBody.dynamic = NO;
_ground.physicsBody.affectedByGravity = NO;
_ground.physicsBody.categoryBitMask = groundCategory;
_ground.physicsBody.collisionBitMask = elementCategory;
_ground.physicsBody.contactTestBitMask = elementCategory;

绿色矩形定位正常,但 SKPhysicsBody 未正确表示此矩形。看起来 SKPhysicsBody 没有根据精灵位置和锚点“移动”它的身体。 SKPhysicsBody 向左移动了 _ground.width 个点。

我做错了什么?

附言。 改成这个(代码)解决了我的问题,但我真的不喜欢这个解决方案,它似乎是一种丑陋的定位元素的方式。

_ground.position = CGPointMake([Helpers landscapeScreenSize].width / 2, 0);

+删除:

_ground.position = CGPointMake(0, 0);

【问题讨论】:

  • 有趣,这在 iOS 8 中不是问题。

标签: objective-c sprite-kit skspritenode


【解决方案1】:

我昨天遇到了完全相同的问题;) 对我来说,我通过使用 SpriteKit 的默认精灵定位解决了这个问题。我只是设置位置并将锚点保留为默认值。然后将物理体设置为精灵的大小。

将您的代码更改为以下内容并检查它是否有效:

_ground = [[SKSpriteNode alloc]
                         initWithColor:[SKColor greenColor]
                                  size:CGSizeMake([Helpers landscapeScreenSize].width, 50)];
_ground.position = CGPointMake([Helpers landscapeScreenSize].width / 2, 0);
_ground.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_ground.size];

如果你仍然没有运气,你也可以尝试为你的精灵使用另一个初始化(这在我的项目中有效)。尝试使用纹理:

[[SKSpriteNode alloc] initWithTexture:[SKTexture textureWithCGImage:[UIImage imageWithColor:[UIColor whiteColor]].CGImage] color:[UIColor whiteColor] size:CGSizeMake(PLAYER_WIDTH, PLAYER_HEIGHT)];

不要忘记实现 (UIImage*)imageWithColor: 方法为您创建所需颜色的 1x1 像素图像 (see here)。

【讨论】:

  • 它有效,但这不是问题所在。为什么将 anchorPoint 移动到 (0,0) 并添加 SKPhysicsBody 会导致此 SKPhysicsBody 的定位不正确?
  • 我认为 SpriteKit 中存在一些错误。当我更改节点的大小或位置时,我还遇到了有关physicsBody 位置的其他一些问题。
  • anchorPoint 是一个纯粹的视觉属性:它定义了纹理相对于节点位置的绘制方式。它对身体没有影响。这不是错误。
  • @LearnCocos2D,所以,定位 SKPhysicsBody 的正确方法 - 不要将 anchorPoint 从 (0.5, 0.5) 更改为 (0,0) 并重新定位整个 spriteNode?​​span>
  • @LearnCocos2D,谢谢,请发表您的评论作为对我的问题的回答,我会接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多