在等距世界中在瓦片之间移动精灵

3
我正在寻找有关如何在等角游戏世界中移动(和动画化)2D精灵的信息,但是要使它们的移动在从一个图块到另一个图块时平滑地动画化,而不是让它们从一个图块的限制跳到下一个图块的限制。
这种情况的一个例子是在《运输大亨》游戏中,火车和车厢经常半在一个图块中,半在另一个图块中。
3个回答

10

在正确的位置绘制精灵并不太困难。投影公式如下:

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缓冲区使其变得非常容易。使用GDI、DirectX等,则非常困难。在某些情况下,Transport Tycoon无法正确地呈现精灵。原始的Transport Tycoon拥有最可怕的渲染引擎,您见过的最可怕的引擎。它实现了三个缩放级别,这是一个巨大的masm宏的三个实例。TT完全是用汇编语言编写的。我知道,因为很多年前我把它移植到了Mac上(并且还为PS1开发工具包做了一个很酷的版本,不过需要6Mb)。

P.S. 游戏中的一个小平房图形是基于Chris Sawyer当时居住的房子。我们曾经想在Mac版中添加一辆Ferrari停在车道上,因为那是他用版税买的。


4
查找如何进行线性插值(这是一个非常简单的公式)。然后,您可以使用它来在单个[0,1]范围内参数化转换。然后,您只需在精灵中存储以下信息:

  1. 它们正在移动
  2. 起点和终点
  3. 开始和结束时间(或开始时间和持续时间)

然后,在每一帧中,您可以使用从起点到终点的插值将其绘制在正确的位置上。一旦超过持续时间,精灵就会更新为不移动,并位于终点/瓷砖中。


0

为什么你认为它会在瓷砖之间跳跃?你可以将你的精灵定位在任何x,y坐标。

首先创建你的背景屏幕缓冲区,然后将你的精灵放在其上方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接