1

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

4

2 回答 2

0

我不确定为什么要多次调用联系代表,但我猜这与将physicsBody 大小设置得如此之小有关。

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

于 2014-03-31T21:03:11.983 回答
0

您能否将 CGRect 放在与需要检测其中是否有另一个节点的节点相同的位置?然后在更新函数中使用CGRect中的contains函数来判断里面是否有节点。

于 2014-06-12T16:34:29.347 回答