sprite-kit - SpriteKit:物理身体“阿尔法”形状问题
问题描述
我正在和我的儿子一起根据 Paul Hudson 的 Dive Into SpriteKi一书开发一个基本游戏。
按照这本书,我们为太空船和太空垃圾卫星创建了一个精灵。它有效,但我们注意到有时船会穿过垃圾。我们尝试使用场景编辑器添加精灵并打开物理:
值得注意的是,使用场景编辑器添加的船节点生成了完全错误的身体轮廓,但是做
player.physicsBody = SKPhysicsBody(texture: player.texture!, size: player.size)
确实修复它。另一方面,对垃圾卫星精灵做同样的事情总是会产生相同的复杂的物理身体。
我唯一的猜测是纹理加载和分析的方式(或时间)有问题。它可以解释为什么这样做会反复修复火箭飞船……但是卫星出了什么问题?以及如何确保正确准备纹理,以便物理体的 alpha 蒙版可靠地工作?
我将不胜感激有关如何处理此问题 (-s) 的任何建议。
我尝试使用alphaThreshold:
,它对船舶轮廓有一些影响,但似乎对卫星轮廓没有影响。
我试图从头开始重新绘制卫星纹理,以排除书中原始文件的问题。对于类似形状的全新文件,问题完全相同。
我们还测试了 iOS 12 和 iOS 13,结果相同。书中的“规范”代码具有完全相同的问题。
从我们的游戏中重现问题的快速方法:
- 使用游戏模板在 Xcode 中创建新项目
- 将卫星资产添加到资产目录:
- 将 Color Sprite 添加到 GameScene.sks,选择卫星作为纹理,并在物理定义部分将 body type 设置为“Alpha mask”。
在我们的案例中,结果如下所示:
预期结果是精灵的准确轮廓。