2009-05-27 74 views
3

我正在寻找关于如何在等距游戏世界中移动(和动画)2D精灵的信息,但是它们的移动动作顺利,因为从瓷砖到瓷砖的旅行相对让他们从一块瓷砖的边界跳到另一块瓷砖的边界。在等轴测世界中的瓷砖之间移动精灵

这方面的一个例子就是运输大亨游戏,火车和马车往往是一半一半,另一半是一半。

回答

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等,这真的很难。运输大亨在所有情况下都无法正确呈现精灵。原来的运输大亨拥有你见过的最可怕的渲染引擎。它实现了三个缩放级别是一个巨大的masm宏的三个instanciations。 TT完全是用汇编写成的。我知道,因为我很多年前把它移植到Mac上(并且为PS1开发套件做了一个很酷的版本,但它需要6Mb)。

P.S.游戏中的一个小平房图形是基于Chris Sawyer当时住的房子。我们试图添加一辆停在Mac版车道上的法拉利,因为这是他用版税购买的车。

0

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

首先创建你的背景屏幕缓冲区,然后将你的精灵放在它的顶部。

4

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

  1. ,他们正在
  2. 起点和终点
  3. 开始和结束时间(或开始时间和持续时间

然后使用从起点到终点的插值在正确的位置绘制每一帧,一旦超过了持续时间,精灵会更新为不移动,并定位在终点/图块中。