首页 > 解决方案 > 精灵位置检测延迟

问题描述

我试图准确地确定以速度移动的节点撞击屏幕边缘的点。目前,节点的位置稍后注册,在检查其位置是否为时(使用根本不注册)时超出屏幕边缘(当移动速度更快时>=更是如此self.frame.maxX==

最初尝试使用应用于精灵的位掩码和充当墙的边界物理主体 - 并遇到 SpriteKit 中的碰撞检测的众所周知 的问题 - 我决定选择默认更新功能,在那里我检查 x 位置。

然而,这两种方法似乎都有问题。从我读过的内容来看,update被称为每秒最多 60 次,因此在帧之间,节点的位置寄存器稍后。

出于同样的原因,我想,使用碰撞检测didBegin也会遇到同样的问题,即使物理体collisionBitMask未将其设置为零 - 这意味着即使节点从它身上反弹。

并且在时间间隔为 0.00001 的计时器调用的自定义函数中检查位置也不准确。

就目前而言,没有可接受的实现 - 我如何精确检查位置?

标签: swiftsprite-kitpositiongame-physics

解决方案


SKPhysicsBody 不是那么精确,有时也没有那么小错误,您可以尝试在函数didBegin中使用它。这总是对我有帮助,也许它也对你有用。

if contact.contactPoint.x >= self.frame.maxX - 5 { 
    //do something
}
if contact.contactPoint.x <= self.frame.minX + 5{
    //do something

我不知道你所说的“旅行速度更快”是什么意思,这个例子在记录速度略低于 400 时没有问题,这有点快。


推荐阅读