Snake Game跟随细分(非网格)

时间:2010-12-05 04:50:41

标签: language-agnostic

我正在尝试创建一个蛇游戏,其中蛇的运动不是基于网格而是自由形式,我遇到了麻烦,弄清楚如何让尾随的部分跟随头部。

最简单的解决方案是从尾部到头部循环,并将当前位置设置为下一个部分的位置,即:segment[i].position = segment[i - 1].position。这很好用,但最终只有一个像素(或左右)聚集在一起的所有段。它不是很有吸引力。

为了击败那个,我为最后15个位置创建了一个阵列,并将最新位置推到了最后。然后每一帧我从数组中弹出第一个元素并使用它,给我一个snapshot,其中段是15帧前。这非常有效,但是通过不断地调用new()并对阵列进行混洗来提高性能。 Flash垃圾收集器给了我地狱。

有人能想到其他任何解决方案吗?

我正在研究Flash,但我不认为解决方案真的基于任何语言。

谢谢!

2 个答案:

答案 0 :(得分:1)

deque往往是这些东西的实现方式,但是如果一个不可用,那么如果队列大小有一个上限,则数组中实现的ring buffer可以作为替代

答案 1 :(得分:0)

  

最简单的解决方案是从尾部到头部循环,并将当前位置设置为下一个部分的位置,即:segment [i] .position = segment [i - 1] .position。这很好用,但最终只有一个像素(或左右)聚集在一起的所有段。它不是很有吸引力。

这不应该导致您描述的聚集。我们能看到代码吗?也许你正在做一些导致分段共享位置对象的东西。

那就是说,光滑的方法(假设它不会弄乱你的艺术,并且你可以一次移动一个段宽)是将头部移动到新的位置,然后移动尾部到头部的位置,将其重新插入到适当位置的列表中。