在等距世界中移动瓷砖之间的精灵

时间:2009-05-27 07:52:37

标签: 2d isometric

我正在寻找有关如何在等距游戏世界中移动(和动画)2D精灵的信息,但是他们的动作在从平铺到平铺的过程中平滑地动画,而不是让它们从一个范围跳出来瓦片,到下一个的范围。

这方面的一个例子是运输大亨游戏,其中火车和车厢通常是一半瓷砖的一半,另一半是一半。

3 个答案:

答案 0 :(得分: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车道上的法拉利,因为那是他用版税购买的车。

答案 1 :(得分:4)

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

  1. 他们正在移动
  2. 开始和结束点
  3. 开始和结束时间(或开始时间和持续时间
  4. 然后使用从起点到终点的插值将每个帧绘制到正确的位置。一旦超过持续时间,精灵就会更新为不移动并定位在终点/平铺中。

答案 2 :(得分:0)

为什么你认为它会从一个瓷砖跳到另一个瓷砖?你可以将你的精灵定位在任何x,y坐标上。

首先创建背景屏幕缓冲区,然后将精灵放在它上面。