使用SprikeKit联系代表确定当前的联系人

时间:2014-09-05 13:56:19

标签: ios objective-c sprite-kit

以下是我在didBeginContact委托方法中使用的代码段:

- (void)didBeginContact:(SKPhysicsContact *)contact
{

    for (Lasers *laser in self.lasers.spawnArray) {
        if (contact.bodyB == self.player.physicsBody && [contact.bodyA.node.name isEqual:laser.sprite.name]) {

            if ([self.lasers isDoneSpawning]) {
                if (!self.player1.isSuperPlayer) {
                    [self playerDied];
                }
            }


        }
    }
}

因此,有红色激光束会在玩家遇到它时杀死玩家。如果玩家当前激活了superPlayer加电,则玩家可以直接穿过这些红色光束。

上面的代码可以很好地实现这一点,但是当玩家启动加电并站在红色光束的正中间然后加电停止时,玩家将不会死亡。原因是此方法仅在两个精灵之间的初始接触开始时运行。

我不认为有一种委托方法可以确定精灵当前是否正在联系。有人有解决方案吗?

2 个答案:

答案 0 :(得分:1)

contactTestBitMask设置为在开机时不接触激光,然后在加电结束时将其设置回。这将生成didEndContact,然后生成didBeginContact,允许相应的代码发挥作用。

答案 1 :(得分:0)

这更像是一个黑客,但应该实现正确的功能......

将超级电源设置为结束后立即移除并重新添加激光束。

这将发出新的didBeginContactEvent信号并应该杀死你的播放器。