Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.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 精灵套件进入/退出区域_Ios_Sprite Kit_Skphysicsbody - Fatal编程技术网

Ios 精灵套件进入/退出区域

Ios 精灵套件进入/退出区域,ios,sprite-kit,skphysicsbody,Ios,Sprite Kit,Skphysicsbody,我需要知道玩家何时进入或退出(多边形)区域。该区域由SKShapeNodes构成。每个SKShapeNode都是一条直线 一个很好的方法似乎是通过SKPhysicsBody在玩家和这些线之间进行碰撞检测。如果玩家在区域内或区域外,我会通过旗帜跟踪 SKPhysicsBody *pilotPhysics = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(0.1, 0.1)]; [pilotPhysics setCategoryBitMa

我需要知道玩家何时进入或退出(多边形)区域。该区域由SKShapeNodes构成。每个SKShapeNode都是一条直线

一个很好的方法似乎是通过SKPhysicsBody在玩家和这些线之间进行碰撞检测。如果玩家在区域内或区域外,我会通过旗帜跟踪

SKPhysicsBody *pilotPhysics = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(0.1, 0.1)];
    [pilotPhysics setCategoryBitMask:   pilotCategory];
    [pilotPhysics setCollisionBitMask:  pilotCategory];
    [pilotPhysics setContactTestBitMask:    airspaceCategory];  
但即使大小为0.1 x 0.1,我的SkPhysicContactDelegate也会收到多条beginContact消息。有时,标记在短时间内被翻转了很多次,在通过周界后,它的值是错误的


确定一个SKNode何时进入或退出另一个SKNode的正确方法是什么?

我不确定为什么会多次调用联系人代理,但我猜这与physicsBody大小设置为如此之小有关


我会尝试让区域的物理实体填充整个区域,而不仅仅是边缘的一条线,然后使用didBeginContact将标志设置为YES,使用didEndContact将标志设置为NO,而不是每次调用代理时都翻转布尔值。

您是否可以将一个CGRect放在需要检测其内部是否有其他节点的节点所在的位置?然后在update函数中使用CGRect中的contains函数来确定其中是否有节点