Ios 使用SprikeKit联系人代理确定当前联系人
下面是我在Ios 使用SprikeKit联系人代理确定当前联系人,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,下面是我在didBeginContactdelegate方法中使用的代码片段: - (void)didBeginContact:(SKPhysicsContact *)contact { for (Lasers *laser in self.lasers.spawnArray) { if (contact.bodyB == self.player.physicsBody && [contact.bodyA.node.name isEqual:laser.
didBeginContact
delegate方法中使用的代码片段:
- (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];
}
}
}
}
}
因此,如果玩家撞到红色激光束,它会杀死玩家。如果播放机当前有超级图层
加电激活,则播放机可以直接穿过这些红色光束
上面的代码完美地实现了这一点,但是当玩家有上电的主动权并站在红色光束的中间,然后电源被关闭,玩家就不会死。原因是此方法仅在两个精灵之间的初始接触开始时运行
我认为没有委托方法来确定精灵当前是否处于接触状态。有人能解决这个问题吗 这更像是一种黑客行为,但应该能够实现适当的功能 将超级电源设置为结束后,立即移除并重新添加激光束
这将标志着一个新的didBeginContactEvent,应该会杀死你的玩家 将
contactTestBitMask
设置为在通电开始时不接触激光器,然后在通电结束时将其设置回原位。这将生成一个didEndContact
,然后生成一个DIDBGENCONTACT
,允许适当的代码发挥作用。可能会将“contactTestBitMask”设置为在通电开始时不接触激光器,然后在通电结束时将其设置回原位?我相信这将生成一个“didEndContact”,然后生成一个“didBeginContact”,从而允许适当的代码发挥作用。这是有效的!把它作为答案贴出来,我会接受的。太好了!我没有把它作为一个答案发布,因为我无法在没有做大量测试的情况下确认它,但既然你这么做了,我就把它作为一个答案发布。很高兴它成功了。你需要在didBeginContact中检查播放器是否是bodyA,激光器是否也是bodyB。哈。。。我会试试的,但肯定是黑客!最后它关闭了,需要添加和删除“contactTestBitMask”