如何根据Alpha值制作PhysicsBody

时间:2014-11-15 18:55:37

标签: objective-c sprite-kit game-physics terrain code-structure

假设有一个场景如下: 有一个与设备框架大小相同的场景。场景中有一个红色的球,可以在整个“世界”中移动。这个世界由黑白区域定义,球只能在白色区域移动。这是一张图片来帮助解释: Picture of the scene

黑色区域的某些部分可以被删除,就像用户在场景上绘制白色一样。这意味着球可以移动的区域不断变化。现在,如何为白色和黑色区域之间的边缘实现physicsBody?

我每次更改都会尝试重新定义physicsBody,但是一旦形状变得足够复杂,这根本不是一个可行的解决方案。我尝试创建一个不可见的“盒子”二维数组,并指定每个盒子中的大部分区域是白色还是黑色,如果球碰到一个黑色的盒子,它会被推回。但是,这需要大量渲染并且过多地迭代阵列。由于我的原始阵列包含比像素稍大的盒子,我尝试使这些盒子更大以使运动平滑一点,但这最终导致部分球被白色区域阻挡并且看起来在黑色区域内。这是不受欢迎的,因为用户可能会感觉到他们似乎遇到的无形障碍。

我试图寻找其他方法来实现这个“可破坏的地形”类型的场景,但我找到并尝试过的解决方案是使用其他游戏引擎。为了进一步说明,我使用的是Objective-C和Apple的SpriteKit框架;而且我不是在寻找一个完整代码的详细课程,而是一些伪代码或实现方法,这些知识将引导我找到解决方案。

谢谢。

1 个答案:

答案 0 :(得分:3)

如果您的部署目标是iOS 8,那么这可能是您正在寻找的......

+ bodyWithTexture:alphaThreshold:size:

以下是Apple的文档

中的说明
  

根据纹理内容创建物理实体。只有纹素   超过某个透明度值的物理包含在物理学中   体。

其中texel是纹理元素。在创建SKPhysicsBody之前,您需要将图像转换为纹理。

我不确定它是否会像你的画一样在中间留一个洞。如果没有,我怀疑你可以连接两个物理体,左半部分和右半部分,形成洞。