精灵套件进入/退出区域

时间:2014-03-29 15:28:23

标签: ios sprite-kit skphysicsbody

我需要知道玩家何时进入或退出(多边形)区域。该区域由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的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

我不确定为什么联系代表被多次调用,但我猜它与物理实体大小设置得如此之小有关。

我尝试使区域的physicsBodies填充整个区域,而不仅仅是边缘的一条线,然后使用didBeginContact将标志设置为YES,并使用didEndContact将标志设置为NO,而不是仅仅翻转每次调用代理时BOOL。

答案 1 :(得分:0)

您是否可以将CGRect放在与您的节点相同的位置,以确定其中是否有其他节点?然后在更新函数中使用CGRect中的contains函数来确定其中是否有节点。