Animation 精灵是如何工作的?

Animation 精灵是如何工作的?,animation,sprite,Animation,Sprite,精灵是如何工作的 我见过像《超级马里奥兄弟》这样的老派游戏中的精灵,我想知道他们是如何制作游戏的 它们总是作为一个大图像地图呈现,那么它们是如何使用的呢 对于马里奥(例如),是否有预先计算的图像坐标来勾勒马里奥的轮廓,并在各种马里奥精灵之间交换以生成动画 或者精灵是在游戏初始化期间使用预先计算的图像坐标预先“切割”的,并存储在内存中的某个地方 显然,我对游戏开发一无所知。 虽然这篇文章似乎没有谈论你的具体问题,但现在我已经仔细阅读了 无论如何,这两种方法都可以实现,但是如果我必须实现一个spri

精灵是如何工作的

我见过像《超级马里奥兄弟》这样的老派游戏中的精灵,我想知道他们是如何制作游戏的

它们总是作为一个大图像地图呈现,那么它们是如何使用的呢

对于马里奥(例如),是否有预先计算的图像坐标来勾勒马里奥的轮廓,并在各种马里奥精灵之间交换以生成动画

或者精灵是在游戏初始化期间使用预先计算的图像坐标预先“切割”的,并存储在内存中的某个地方

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

虽然这篇文章似乎没有谈论你的具体问题,但现在我已经仔细阅读了


无论如何,这两种方法都可以实现,但是如果我必须实现一个sprite处理程序,我可能会使用Spliting方法(尽管如另一个答案所述,坐标参考方法可能更容易实现一个简单的动画)。

两者都可以,这取决于开发人员。如果它们存储为单个大图像,则计算所需帧的坐标并将其传输到屏幕,或将双缓冲屏幕传输到后屏幕

或者,您可以将大图像预切割为单独的图像,这会占用更多的内存,但在运行时会减少一点时间


单个图像中可以有多个精灵。也许在一行中,或者在一个网格中。它们甚至可能被绘制为网格,并简单地剪切成单个块。

图像贴图中的精灵通常大小相同,其位置对应于动画中的帧数。这样,创建动画通常只需要增加偏移量并剪裁位图以显示下一帧。

第一种技术中的大图像称为一个,通常比为每个精灵帧创建一个实体要高效得多


Franci提到的偏移技术在大多数情况下都非常有效,但对于内存严重的情况,最好使用纹理打包程序,如Zwoptex。大多数程序都会自动为您计算坐标。在init上解析元文件并缓存坐标。

像NES和DS这样的2D控制台将图像分解为两级层次结构。底部是一块瓷砖。tileset是8x8像素图像的索引集合。当级别加载时,将加载一个平铺集,通常加载到专用于图形的内存部分

精灵和关卡就建立在这之上。一个32x64像素字符的精灵被分成4x8块。现在要定义一个sprite,您只需要32个值来标识它使用的分幅的索引。非常节省内存。不同的动画帧和精灵现在可以重用相同的分片,从而节省大量内存


现在让游戏绘制一个精灵,它只需在每个索引处查找精灵的瓷砖,并将其绘制在屏幕上的正确位置。控制台硬件本身通常可以处理这一问题,这就是如何在非常有限的硬件上获得令人惊讶的良好图形(最初的网元有1.67 MHz的CPU,只有4k的RAM)。

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

一些机器(如奥德赛2)包含在视频芯片硬件中,用于保存屏幕上所有精灵的形状。Atari 2600只为每个精灵保存了8位的形状数据,并且要求处理器在任何需要更改的地方实时加载数据。然而,最常见的模式是视频芯片自动从内存中为精灵数据计时。通常,硬件期望数据采用特定格式,或者在某些情况下,采用两种格式之一


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

实际上,维基百科上有一篇内容广泛的文章。那么有多个精灵层合成在一起吗?这取决于你想要做的动画类型。如果要独立设置多个对象的动画,则可以设置多个精灵层。