Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用SprikeKit联系人代理确定当前联系人_Ios_Objective C_Sprite Kit - Fatal编程技术网

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”