我正在尝试创建一个蛇游戏,其中蛇的运动不是基于网格而是自由形式,我遇到了麻烦,弄清楚如何让尾随的部分跟随头部。
最简单的解决方案是从尾部到头部循环,并将当前位置设置为下一个部分的位置,即:segment[i].position = segment[i - 1].position
。这很好用,但最终只有一个像素(或左右)聚集在一起的所有段。它不是很有吸引力。
为了击败那个,我为最后15个位置创建了一个阵列,并将最新位置推到了最后。然后每一帧我从数组中弹出第一个元素并使用它,给我一个snapshot
,其中段是15帧前。这非常有效,但是通过不断地调用new()
并对阵列进行混洗来提高性能。 Flash垃圾收集器给了我地狱。
有人能想到其他任何解决方案吗?
我正在研究Flash,但我不认为解决方案真的基于任何语言。
谢谢!
答案 0 :(得分:1)
deque往往是这些东西的实现方式,但是如果一个不可用,那么如果队列大小有一个上限,则数组中实现的ring buffer可以作为替代
答案 1 :(得分:0)
最简单的解决方案是从尾部到头部循环,并将当前位置设置为下一个部分的位置,即:segment [i] .position = segment [i - 1] .position。这很好用,但最终只有一个像素(或左右)聚集在一起的所有段。它不是很有吸引力。
这不应该导致您描述的聚集。我们能看到代码吗?也许你正在做一些导致分段共享位置对象的东西。
那就是说,光滑的方法(假设它不会弄乱你的艺术,并且你可以一次移动一个段宽)是将头部移动到新的位置,然后移动尾部到头部的位置,将其重新插入到适当位置的列表中。