【问题标题】:skactions in spritekit and repositioning the spritespritekit 中的 skactions 和重新定位精灵
【发布时间】:2014-05-04 07:45:00
【问题描述】:

大家好,我有一个游戏,其中有一块石头从天而降。现在我将它的 skphysics 重力设置为 yes 所以它会下降,但问题是我不知道如何将它的位置重置到屏幕顶部,所以它会再次重复它的下降动作。

- (void) addStoneAtPosition {
      _StoneNode = [SKSpriteNode spriteNodeWithImageNamed:@"stone2@2x"];
      _StoneNode.position = CGPointMake(self.size.width/2, self.size.height);

      _StoneNode.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_StoneNode.size];
      _StoneNode.physicsBody.usesPreciseCollisionDetection = YES;
      _StoneNode.physicsBody.dynamic = YES;
      _StoneNode.physicsBody.mass = 10.0f;
      _StoneNode.physicsBody.categoryBitMask = CNPhysicsstone1Category;
      _StoneNode.physicsBody.contactTestBitMask = CNPhysicsbulletCategory |  
                                                  CNPhysicsstone1Category;
      [_gameNode addChild:_StoneNode];
      [_StoneNode attachDebugRectWithSize:_StoneNode.size];
      _StoneNode.physicsBody.affectedByGravity = YES;
      for (int i = 0; i<100; i++) {
          _StoneNode.position = CGPointMake(self.size.width/2, self.size.height);
      }
  } 

【问题讨论】:

  • if stone.position.y
  • 感谢您的帮助,但我很抱歉,我不知道您刚才推荐的方法是什么,因为看到,石头的位置最初是 self.size.height 但如何回到那个位置重力影响这块石头后的位置?
  • 这可能吗? stone.position = CGPointMake(self.size.width, self.size.height);
  • 我已经有了这个:_StoneNode.position = CGPointMake(self.size.width/2, self.size.height);但是在重力影响了我的石头之后,我会如何回忆呢?

标签: sprite-kit


【解决方案1】:

在您的 SKScene 中覆盖 didSimulatePhysics 并检查石头是否低于场景可视区域的底部。

if (stone.position.y < 0) { ... }

如果它在此可视区域下方,您至少有两个选择。

1) 调用[stone removeFromParent]; 将石头从场景中移除,并以与创建原始石头相同的方式重新创建一个新石头。

2) 将石头的位置设置在视图顶部上方的某个位置

stone.position = CGPointMake(stone.position.x, stone.scene.size.height + stoneHeight);

【讨论】:

  • 这超出了您的问题范围,但我建议您查看使用 SpriteKit-Components 它允许您直接在自定义节点子类中实现这些方法,甚至将它们完全分开。我发现它很有帮助,它让你的场景类变得更加整洁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多