我需要知道玩家何时进入或退出(多边形)区域。该区域由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,我的SKPhysicsContactDelegate也会收到多条beginContact消息。有时标记在短时间内被翻转了很多次,在通过周边后它的值有错误。
确定SKNode何时进入或退出另一个SKNode的正确方法是什么?
答案 0 :(得分:0)
我不确定为什么联系代表被多次调用,但我猜它与物理实体大小设置得如此之小有关。
我尝试使区域的physicsBodies填充整个区域,而不仅仅是边缘的一条线,然后使用didBeginContact将标志设置为YES,并使用didEndContact将标志设置为NO,而不是仅仅翻转每次调用代理时BOOL。
答案 1 :(得分:0)
您是否可以将CGRect放在与您的节点相同的位置,以确定其中是否有其他节点?然后在更新函数中使用CGRect中的contains函数来确定其中是否有节点。