SpriteKit SKPhysicsBody 破碎碰撞
Posted
技术标签:
【中文标题】SpriteKit SKPhysicsBody 破碎碰撞【英文标题】:SpriteKit SKPhysicsBody broken collisions 【发布时间】:2016-05-18 16:46:20 【问题描述】:我有一个 SKSpriteNode
,它有一个静态主体,由 凹形路径 和 edgeChainFromPath
生成。我们称这个节点为house。
我还有另一种SKSpriteNode
s,它有一个动态的方形主体,由rectangleOfSize
生成。我们称这个节点为box。
在我的场景中,boxes 被扔进了 house,由于它们都有身体,boxes 应该与房子然后弹开。
我正在滚动场景,因此创建了与上述完全相同的 house 的新实例。
我遇到的问题是某些房屋的碰撞完全或部分损坏。一些 houses 与 boxes 完全碰撞,有些与 boxes 仅在身体的某些随机部分发生碰撞,而有些则完全忽略与盒子。
这个问题只发生在 iPad 上,从不在 iPhone 上。在 iPad 模拟器和真正的 iPad 设备上都会发生。
这个问题是完全随机发生的,并且发生在随机的房屋上。
我也尝试使用edgeLoopFromPath
创建 house 正文,但问题仍然存在。
另外,我正在绘制物理图,可以看到房子的物理体完全符合它应有的样子。
场景或节点没有其他值得一提的特别之处。
我在ios 9
中使用SpriteKit
和Swift
。
更新:
似乎问题在于在 house 节点上设置比例。我必须这样做才能在所有屏幕尺寸上都有通用外观。
仍在寻找解决方案/解决方法...
【问题讨论】:
您是否启用了视觉物理表示并检查了一切是否正常? @Whirlwind 就像我说的:“我在画物理学”。所以是的。 :) 场景中有快速移动的物体吗?此外,如果您手动更改可能发生碰撞的节点的位置,那么您可能会遇到奇怪的行为...... @Whirlwind 是的,盒子是快速移动的物体,因为它们是有脉冲的,但它们移动的速度并不重要。我试过改变速度,我仍然得到相同的结果。谈到手动更改位置:我不手动更改场景中任何节点的位置。我通过移动 iOS 9 中引入的新相机节点来滚动场景。 1) 尝试在快速移动的物体上设置 usesPreciseCollisionDetection,看看是否有任何变化。仔细检查您是否没有手动更改参与物理模拟的任何节点上的位置。通过手动更改我的意思是直接更改位置属性,或者使用 SKaction.moveXxx 方法。 【参考方案1】:这可能是由于 edgeLoopFromPath 为您的房子创建了一个带有边缘的空心盒子,而不是一个带有体积的盒子。
我会尝试使用bodyWithPolygonFromPath 以及为您的盒子和房屋添加精确碰撞检测。
【讨论】:
以上是关于SpriteKit SKPhysicsBody 破碎碰撞的主要内容,如果未能解决你的问题,请参考以下文章
SpriteKit 的 SKPhysicsBody 与多边形辅助工具
iOS -- SpriteKit框架之SKPhysicsBody的移动和连接
使用“bodyWithTexture”(SpriteKit)时更改 SKPhysicsBody 的中心点
SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody