SpriteKit SKPhysicsBody 破碎碰撞

Posted

技术标签:

【中文标题】SpriteKit SKPhysicsBody 破碎碰撞【英文标题】:SpriteKit SKPhysicsBody broken collisions 【发布时间】:2016-05-18 16:46:20 【问题描述】:

我有一个 SKSpriteNode,它有一个静态主体,由 凹形路径edgeChainFromPath 生成。我们称这个节点为house

我还有另一种SKSpriteNodes,它有一个动态的方形主体,由rectangleOfSize生成。我们称这个节点为box

在我的场景中,boxes 被扔进了 house,由于它们都有身体,boxes 应该与房子然后弹开。

我正在滚动场景,因此创建了与上述完全相同的 house 的新实例。

我遇到的问题是某些房屋的碰撞完全或部分损坏。一些 housesboxes 完全碰撞,有些与 boxes 仅在身体的某些随机部分发生碰撞,而有些则完全忽略与盒子

这个问题只发生在 iPad 上,从不在 iPhone 上。在 iPad 模拟器和真正的 iPad 设备上都会发生。

这个问题是完全随机发生的,并且发生在随机的房屋上。

我也尝试使用edgeLoopFromPath 创建 house 正文,但问题仍然存在。

另外,我正在绘制物理图,可以看到房子的物理体完全符合它应有的样子。

场景或节点没有其他值得一提的特别之处。

我在ios 9 中使用SpriteKitSwift


更新

似乎问题在于在 house 节点上设置比例。我必须这样做才能在所有屏幕尺寸上都有通用外观。

仍在寻找解决方案/解决方法...

【问题讨论】:

您是否启用了视觉物理表示并检查了一切是否正常? @Whirlwind 就像我说的:“我在画物理学”。所以是的。 :) 场景中有快速移动的物体吗?此外,如果您手动更改可能发生碰撞的节点的位置,那么您可能会遇到奇怪的行为...... @Whirlwind 是的,盒子是快速移动的物体,因为它们是有脉冲的,但它们移动的速度并不重要。我试过改变速度,我仍然得到相同的结果。谈到手动更改位置:我手动更改场景中任何节点的位置。我通过移动 iOS 9 中引入的新相机节点来滚动场景。 1) 尝试在快速移动的物体上设置 usesPreciseCollisionDetection,看看是否有任何变化。仔细检查您是否没有手动更改参与物理模拟的任何节点上的位置。通过手动更改我的意思是直接更改位置属性,或者使用 SKaction.moveXxx 方法。 【参考方案1】:

这可能是由于 edgeLoopF​​romPath 为您的房子创建了一个带有边缘的空心盒子,而不是一个带有体积的盒子。

我会尝试使用bodyWithPolygonFromPath 以及为您的盒子和房屋添加精确碰撞检测。

【讨论】:

以上是关于SpriteKit SKPhysicsBody 破碎碰撞的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 的 SKPhysicsBody 与多边形辅助工具

iOS -- SpriteKit框架之SKPhysicsBody的移动和连接

使用“bodyWithTexture”(SpriteKit)时更改 SKPhysicsBody 的中心点

SpriteKit:SKSpriteNode 包含另一个 SKSpriteNodes 但只有一个 SKPhysicsBody

SpriteKit SKPhysicsBody 破碎碰撞

SpriteKit SKPhysicsBody 像一扇门一样的方向碰撞你只能穿过但不能回来