2010-06-10 65 views
3

精灵如何工作?精灵如何工作?

我见过像超级马里奥兄弟这样的老派游戏的精灵,并想知道他们是如何制作动画来制作游戏的。

它们总是作为一个大的图像地图呈现,所以它们是如何使用的?

对于马里奥(作为一个例子)是否有预先计算的图像坐标轮廓马里奥,并在不同的马里奥精灵之间交换,以产生动画?

或者在游戏初始化过程中,使用预先计算的图像坐标并在某处存储在内存中,这些精灵会被“剪切”?

很明显,我对游戏开发一无所知。

+3

实际上有关于维基百科的广泛文章。 http://en.wikipedia.org/wiki/Sprite_%28computer_graphics%29 – 2010-06-10 16:30:38

回答

3

在许多较早的视频游戏和计算机系统上,精灵是一种硬件功能,可将小图像叠加到更大的屏幕上。虽然Atari 7800有一个类似于维基百科文章中描述的精灵实现,但在这方面它实际上是独一无二的。大多数sprite系统对于扫描线上可能显示的每个sprite都使用一组独立的电路,包括水平位置触发器和移位寄存器或其他顺序发送数据的手段。当光栅扫描到达一条线上的适当位置时,电路将开始移出精灵的形状数据。

包含在视频芯片硬件内的一些机器(如Odyssey2)可以保持屏幕上所有精灵的形状。 Atari 2600仅保存每个精灵的8位形状数据,并要求处理器在任何应该改变的地方实时加载数据。然而,最常见的模式是视频芯片自动记录内存中的精灵数据。通常,硬件会希望数据采用特定的格式,或者在某些情况下,采用两种格式之一。

在某些机器上,可以在没有CPU干预的情况下在一个框架上同时显示的精灵数量等于精灵电路的数量。其他机器有少量的精灵电路,但可以显示更多精灵;一旦电路完成显示一个精灵,它就会从内存加载下一个精灵的参数。 NES适合这种模式。

3

http://en.wikipedia.org/wiki/Sprite_(computer_graphics)

虽然文章似乎不谈论您的具体问题,现在,我通过它彻底看...

无论如何,这大概可以做到无论哪种方式,但如果我我不得不实现一个精灵处理程序,我可能会使用拆分方法(尽管如另一个答案中所述,坐标引用方法可能更容易实现一个简单的动画)。

1

你可以做到这一点,这取决于开发者。如果它们存储为单个大图像,则计算所需帧的坐标并将其传送到屏幕,或者将屏幕传送到双屏缓冲屏幕。

或者你可以预先切割大图片为独立的图像,这需要多一点的内存,但在运行时在单个图像

可以有多个精灵刮胡子一点休息时间。也许在单行或网格中。他们甚至可能被画成一个网格,并在一个单一的区块中简单地切出。

1

图像映射中的精灵通常是相同的大小,它们的位置对应于动画中的帧编号。这样,创建动画通常只包括增加偏移量并剪切位图以显示下一帧。

+0

那么有多个精灵层合成在一起吗? – Alan 2010-06-10 16:36:30

+0

这取决于人们想要做的动画类型。如果你想独立动画多个对象,那么是的,你有多层精灵。 – 2010-06-10 17:16:44

1

第一种技术中的大图像被称为atlas,通常比为每个精灵帧创建实体更有效率。

Franci提到的胶印技术在大多数情况下都很有效,但对于内存危急的情况,最好使用Zwoptex之类的纹理打包程序。大多数这些程序会自动为您计算坐标。在init中解析元文件并缓存坐标。

1

像NES和DS这样的2D控制台可以将图像分解为两层结构。底部是一个瓷砖。瓦片集是8x8像素图像的索引集合。一个tileset会在加载时加载,通常加载到专用于图形的内存部分中。

精灵和水平,然后建立在此之上。像32x64像素字符的精灵分成4x8瓦。现在要定义一个精灵,你只需要32个值来标识它使用的方块的索引。非常有记忆效率。现在不同的动画帧和精灵可以重复使用相同的块,节省大量的内存。

现在为了让游戏画出一个精灵,它只是在精灵的每个索引处查找拼贴,并将它们绘制在屏幕上的正确位置。控制台硬件本身通常会处理这种情况,这就是如何在非常有限的硬件上获得出人意料的好图形(原始NES有1.67 MHz CPU和只有4k RAM)。