以下是我在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
加电,则玩家可以直接穿过这些红色光束。
上面的代码可以很好地实现这一点,但是当玩家启动加电并站在红色光束的正中间然后加电停止时,玩家将不会死亡。原因是此方法仅在两个精灵之间的初始接触开始时运行。
我不认为有一种委托方法可以确定精灵当前是否正在联系。有人有解决方案吗?
答案 0 :(得分:1)
将contactTestBitMask
设置为在开机时不接触激光,然后在加电结束时将其设置回。这将生成didEndContact
,然后生成didBeginContact
,允许相应的代码发挥作用。
答案 1 :(得分:0)
这更像是一个黑客,但应该实现正确的功能......
将超级电源设置为结束后立即移除并重新添加激光束。
这将发出新的didBeginContactEvent信号并应该杀死你的播放器。