首页 > 解决方案 > SpriteKit:物理身体“阿尔法”形状问题

问题描述

我正在和我的儿子一起根据 Paul Hudson 的 Dive Into SpriteKi一书开发一个基本游戏。

按照这本书,我们为太空船和太空垃圾卫星创建了一个精灵。它有效,但我们注意到有时船会穿过垃圾。我们尝试使用场景编辑器添加精灵并打开物理:

显示物理体形问题的图片

值得注意的是,使用场景编辑器添加的船节点生成了完全错误的身体轮廓,但是做

player.physicsBody = SKPhysicsBody(texture: player.texture!, size: player.size)

确实修复它。另一方面,对垃圾卫星精灵做同样的事情总是会产生相同的复杂的物理身体。

我唯一的猜测是纹理加载和分析的方式(或时间)有问题。它可以解释为什么这样做会反复修复火箭飞船……但是卫星出了什么问题?以及如何确保正确准备纹理,以便物理体的 alpha 蒙版可靠地工作?

我将不胜感激有关如何处理此问题 (-s) 的任何建议。

我尝试使用alphaThreshold:,它对船舶轮廓有一些影响,但似乎对卫星轮廓没有影响。

我试图从头开始重新绘制卫星纹理,以排除书中原始文件的问题。对于类似形状的全新文件,问题完全相同。

我们还测试了 iOS 12 和 iOS 13,结果相同。书中的“规范”代码具有完全相同的问题。

在 GitHub 上查看我们的游戏完整实现

从我们的游戏中重现问题的快速方法:

  1. 使用游戏模板在 Xcode 中创建新项目
  2. 将卫星资产添加到资产目录:

卫星

  1. 将 Color Sprite 添加到 GameScene.sks,选择卫星作为纹理,并在物理定义部分将 body type 设置为“Alpha mask”。

在我们的案例中,结果如下所示:

在此处输入图像描述

预期结果是精灵的准确轮廓。

标签: sprite-kitcollision-detection

解决方案


推荐阅读