其他人都有过这个问题。我有两个节点相互移动。当我提高它们的移动速度时,当前两个节点走到一起时,第三个节点试图在它们之间通过时,它会检测到碰撞,即使你可以看到没有一个节点接触过。我也在使用精确的碰撞检测。他们还有什么我能做的吗?
既然我们确定了这个问题,我将把它作为一个答案发布:
发生的情况是,在更新阶段,您将删除所有与碰撞有关的节点,因此您永远不会看到它们接触。
相反,您需要做的是跟踪将要删除的节点(SKNode的一个漂亮阵列工作得很好),然后在更新阶段开始时,立即检查删除的节点是否为空。如果它不是空的,那么您需要遍历它并将它们从场景中移除。
示例:
var removeNodes = [SKNode]()
...
func update(currentTime: CFTimeInterval)
{
if(removeNodes.count > 0)
{
for node in removeNodes
{
node.removeFromParent()
}
}
removeNodes.removeAll()
}
... normal update code
...at some point after collision
//node A needs to be removed
removeNodes.append(nodeA)