swift - 精灵位置检测延迟
问题描述
我试图准确地确定以速度移动的节点撞击屏幕边缘的点。目前,节点的位置稍后注册,在检查其位置是否为时(使用根本不注册)时超出屏幕边缘(当移动速度更快时>=
更是如此self.frame.maxX
)==
。
最初尝试使用应用于精灵的位掩码和充当墙的边界物理主体 - 并遇到 SpriteKit 中的碰撞检测的众所周知 的问题 - 我决定选择默认更新功能,在那里我检查 x 位置。
然而,这两种方法似乎都有问题。从我读过的内容来看,update
被称为每秒最多 60 次,因此在帧之间,节点的位置寄存器稍后。
出于同样的原因,我想,使用碰撞检测didBegin
也会遇到同样的问题,即使物理体collisionBitMask
未将其设置为零 - 这意味着即使节点从它身上反弹。
并且在时间间隔为 0.00001 的计时器调用的自定义函数中检查位置也不准确。
就目前而言,没有可接受的实现 - 我如何精确检查位置?
解决方案
SKPhysicsBody 不是那么精确,有时也没有那么小错误,您可以尝试在函数didBegin中使用它。这总是对我有帮助,也许它也对你有用。
if contact.contactPoint.x >= self.frame.maxX - 5 {
//do something
}
if contact.contactPoint.x <= self.frame.minX + 5{
//do something
我不知道你所说的“旅行速度更快”是什么意思,这个例子在记录速度略低于 400 时没有问题,这有点快。
推荐阅读
- r - 如何在R中做平均线
- html - 如何使固定 div 下的 div 不可滚动?
- angular - Angular 安全拦截器未在 POST 请求中添加身份验证标头
- php - Rediect->toRoute() 中的 $option 用于什么?
- javascript - 如何将所有电子表格附加到同一文件夹中?
- vega-lite - 对条形图的堆栈段进行排序
- reactjs - 如何在 Gatsby 项目中使用自定义组件文件夹?
- azure-devops - VSTS 发布管道发布门:如何进行 HTTP 响应正文字符串相等性检查?
- javascript - 在 jQuery 中访问表格单元格
- jquery - 我如何在数据表 jquery 中使用 laravel 关系引用