RTS车辆网格运动

时间:2009-04-21 18:22:46

标签: language-agnostic

我不知道如何实现良好的2D网格运动。像士兵这样的单位很容易实现运动,但我不知道如何以优雅的方式转动车辆。运动应该像C& C Red Alert一样(不是3,因为它是3D,我只想要2D)。

编辑:我不问任何代码,也没有链接到寻路算法,因为它们很容易找到。但网格运动不是。我不知道“完全”是如何从一个瓷砖移动到另一个瓷砖,特别是对角线移动(即使它比正交移动“更长”移动)。

3 个答案:

答案 0 :(得分:2)

注意,我正在做这件事,但它应该可以正常工作。

给定源和目标坐标,只需在两点之间“画一条线”,然后沿着该线移动车辆。

当车辆在更细粒度的图形表面上移动时,您可以确定单位“真正”在哪个方格(例如,通过简单的坐标映射)。

如果一个单位在单个方格中很重要,那么当单位“停止”时,它可以滑行到下一个方格,它可以完全包含它(即如果它已经离开方形A,它继续移动到B甚至车辆“停了”)。

计算两点之间的航向以确定车辆的方向。

如果您的车辆只有8个方向,那么您可以将它们指向下一个增量方形目的地而不是最终目的地。对于缓慢移动的车辆来说,这看起来不错,但对于快速的车辆来说,这会很有趣。

请参阅此line drawing algorithm以帮助计算方块。记住,当然,这与路径发现无关。

答案 1 :(得分:1)

一种方法是以每回合的网格单位表示车辆的转弯半径,并使用Bresenham圆算法逐渐将它们移动到每个转弯处的下一个相邻网格单元

答案 2 :(得分:1)

Eric Lippert的这个4-part series应该有所帮助:

我知道你没有指定C#,但他提出的一般算法是合理的。