2010-06-10 48 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)。