两个精灵之间的碰撞检测(没有物理身体?)iOS

时间:2014-10-23 03:40:08

标签: ios objective-c sprite-kit

我无法通过碰撞检测来处理我的两个对象。这是我目前的代码:

    _firstPosition = CGPointMake(self.frame.size.width * 0.817f, self.frame.size.height * .40f);
    _squirrelSprite = [SKSpriteNode spriteNodeWithImageNamed:@"squirrel"];
    _squirrelSprite.position = _firstPosition;
    _atFirstPosition = YES;
    [self addChild:_squirrelSprite];

    SKAction *wait = [SKAction waitForDuration:3.0];

    SKAction *createSpriteBlock = [SKAction runBlock:^{
        SKSpriteNode *lightnut = [SKSpriteNode   spriteNodeWithImageNamed:@"lightnut.png"];
        BOOL heads = arc4random_uniform(100) < 50;
        lightnut.position = (heads)? CGPointMake(257,600) : CGPointMake(50,600);
        [self addChild: lightnut];

        SKAction *moveNodeUp = [SKAction moveByX:0.0 y:-700.0 duration:1.3];
        [lightnut runAction: moveNodeUp];
    }];

    SKAction *waitThenRunBlock = [SKAction sequence:@[wait,createSpriteBlock]];

    [self runAction:[SKAction repeatActionForever:waitThenRunBlock]];

我最初是按照这个答案:Sprite Kit Collision Detection但是当我将物理身体设置为我的松鼠和坚果时,他们就会摔倒。有没有办法不搞乱物理(我很高兴目前在应用程序中的一切如何工作)并且只是让它当一个物体接触另一个物体时游戏将结束?有没有办法只在精灵周围设置半径?感谢您提供任何帮助或信息。

2 个答案:

答案 0 :(得分:4)

碰撞检测需要物理实体。如果你不想要引力,要么将物理世界的gravity设置为零,要么关闭每个物理体上的affectedByGravity属性。

答案 1 :(得分:1)

您可以使用毕达哥拉斯定理来确定两个精灵节点之间的距离。以下是如何执行此操作的示例:

CGFloat dx = sprite1.position.x - sprite2.position.x;
CGFloat dy = sprite1.position.y - sprite2.position.y;

CGFloat distance = sqrt(dx*dx+dy*dy);

// Check if the two nodes are close
if (distance <= kMaxDistance) {
    // Do something
}
相关问题