【发布时间】:2014-11-15 18:55:37
【问题描述】:
假设有如下场景: 有一个与设备边框大小相同的场景。场景中有一个红色的球,它可以在“世界”中移动。这个世界是由黑色和白色区域定义的,球只能在白色区域内移动。这是一张帮助解释的图片:
可以擦除部分黑色区域,就像用户在场景上用白色绘制一样。这意味着可以移动球的区域不断变化。现在,如何为白色和黑色区域之间的边缘实现一个physicsBody?
我尝试在每次更改物理体时重新定义它,但是一旦形状变得足够复杂,这根本不是一个可行的解决方案。我尝试创建一个不可见的“盒子”二维数组,并指定每个盒子内的大部分区域是白色还是黑色,如果球碰到黑色的盒子,它将被推回。但是,这需要大量的渲染和对数组的过多迭代。由于我的原始数组包含比像素大一点的框,因此我尝试将这些框变大以稍微平滑运动,但这最终导致球的一部分被白色区域停止并看起来在黑色区域内。这是不希望的,因为用户可能会感觉到他们似乎正在撞击的无形障碍。
我尝试寻找其他方法来实现这种“可破坏地形”类型的场景,但我找到并尝试的解决方案是使用其他游戏引擎。为了进一步澄清,我使用的是 Objective-C 和 Apple 的 SpriteKit 框架;而且我不是在寻找一个充满代码的详细类,而是在寻找一些伪代码或实现想法来引导我找到解决方案。
谢谢。
【问题讨论】:
-
基本上你需要一个轮廓跟踪算法来创建洞穴轮廓的 CGPath。每次洞穴发生变化时,都需要重新运行这个算法并替换现有的边缘循环体。然而,这种追踪和重建形状可能会禁止在实时动作游戏或洞穴几乎一直在变化的地方使用它。
-
对不起,如果我不够清楚,这是我尝试的第一个解决方案。起初是可行的(洞穴以一个小白圈开始);但是正如你所说,一旦边缘由于不断变化而变得复杂,它就没有用了。
标签: objective-c sprite-kit game-physics terrain code-structure