我正在寻找有关如何在等距游戏世界中移动(和动画) 2D 精灵的信息,但是在从一个瓷砖到另一个瓷砖的旅行时让它们的运动平滑地动画,而不是让它们从一个瓷砖的范围内跳跃到下一个的范围。
这方面的一个例子是在运输大亨游戏中,火车和马车通常一半在一块,一半在另一块。
在正确的位置绘制精灵并不难。投影公式为:
screen_x = sprite_x - sprite_y
screen_y = (sprite_x + sprite_y) / 2 + sprite_z
sprite_x 和 sprite_y 是定点值(如果需要,也可以是浮点值)。通常,固定点的精度是图块上的像素数 - 因此,如果您的图块图形是 32x16(投影的 32x32 正方形),您将有 5 位精度,即图块的 1/32。
真正困难的部分是将精灵排序成正确渲染的顺序。如果您使用 OpenGL 进行绘图,则可以使用 z-buffer 使这变得非常容易。使用 GDI、DirectX 等,真的很难。Transport Tycoon 不会在所有实例中正确渲染精灵。最初的运输大亨拥有你见过的最可怕的渲染引擎。它实现了三个缩放级别,是大规模 masm 宏的三个实例。TT 完全用汇编程序编写。我知道,因为我多年前将它移植到 Mac 上(并且还为 PS1 开发套件做了一个很酷的版本,不过它需要 6Mb)。
PS 游戏中的小平房图形之一是基于克里斯·索耶当时居住的房子。我们很想为 Mac 版添加一辆停在车道上的法拉利,因为那是他用版税购买的汽车。
查找如何进行线性插值(这是一个非常简单的公式)。然后,您可以使用它来参数化单个 [0, 1] 范围内的转换。然后,您只需在 sprite 中有一个状态来存储事实:
然后每一帧你都可以使用从起点到终点的插值将其绘制在正确的位置。一旦你超过了持续时间,精灵就会被更新为不动并定位在终点/瓦片中。
你为什么认为它会从一个瓷砖跳到另一个瓷砖?您可以将您的精灵定位在任何 x,y 坐标上。
首先创建背景屏幕缓冲区,然后将精灵放在它上面。