GBA的Tile模式技術探討--空間佔用篇(轉)

post0發表於2007-08-12
GBA的Tile模式技術探討--空間佔用篇(轉)[@more@]

  幾乎我們所知的所有2D遊戲主機都採用tile模式,GBA也是如此,GBA的6種背景模式中,其中三種是tile模式,另三種是點陣圖模式。而在任天堂的官方手冊上面,很明確地說明三種點陣圖模式是用來顯示靜止圖片或者動畫的,並不建議用來進行遊戲設計。

  

  對長期進行PC軟體開發的我們tile模式看起來就像一個怪物,和點陣圖模式相比就好象是Dos那個字元終端和Windows的圖形介面那樣對比鮮明。我的一個好朋友,一個資深的程式設計師,就跟我說tile太不直觀了,沒有任何意義。事實上,我們知道即使很多PC機遊戲也在利用類似tile模式一樣的機制。比如C&C等等,一般來說,在PC機上這種機制叫做地圖機制。

  

  這裡我們打算用量化的方法來比較tile模式和點陣圖模式,當然指標就是做掌機遊戲的開發者最關心空間和速度。

  

  首先,我們來看空間的問題:

  

  這裡我們用來比較的是GBA的模式0(tile)和模式4(點陣圖),這兩種模式都是用得相當廣泛的。另外我們拿它們做比較,也是因為它們的顏色模式是一致的。他們的顏色模式都是同屏256色,一個調色盤,模式0的圖塊大小是8*8。

  

  現在我們假設我們要製作的遊戲裡面有100個獨立場景都是240*160大小的,那麼我們可以計算出來模式4需要的圖片資料空間為:

  

  100(張)*240*160*1(位元組)≈3.66m

  

  這時候我們發現模式0的圖片資料空間計算並不是一個簡單的事情,因為需要的圖塊數量是不確定的,這和遊戲本身有大的關係。我們首先計算如果所有的圖塊都是不重複的,那麼一個240*160的場景需要:

  

  240*160/8/8=600個

  

  也就是說,一個場景需要的圖塊數目假設為,那麼0<n≤600。我們知道一個圖塊佔用64位元組。那麼,n個圖塊佔用的空間就是64n。

  

  另外,我們知道tile模式下,還需要儲存地圖資訊。在模式0下這個部分的空間佔用是(一個圖塊的索引佔2個位元組):

  

  240*160/8/8*2=1200位元組

  

  所以模式0下,圖片資料空間大小應該為:

  

  (1200+64n)*100=120000+6400n=120k+6.4k*n

  

  現在我們來比較模式4和模式0佔用的圖片資料空間:

  

  3.66兆/120k+6.4k*n

  

  我們可以簡單的算出在某個極端情況下,即n=600的情況下,模式0比模式4多佔用120k空間。然而當另一個極端的時候,即n=1的情況下,模式0只佔用120k+64位元組的空間,這時模式4佔用的空間是模式0的30倍。我不能給出一個一般的遊戲中圖塊重複率的大小,所以我們只好假設一般來說重複率為z,z=n/600。我們可以得出當z=1的時候,模式4和模式0在空間佔用上,沒有顯著差異。當重複率為z的時候,模式0的空間佔用是:

  

  120k+6.4k*600*z≈3.66兆*z

  

  也就是說,重複律是多少我們模式0相對於模式4的空間節省就是多少。當重複率z=50%的時候,模式0的空間佔用為1.88兆。

  

  直觀上,我們可以對一個遊戲的圖塊重複率z有一個認識,比如下面是著名的Gba遊戲口袋怪獸手中的一個場景,我們直觀的估計z肯定小於50%。

  

  在這類的遊戲,RPG,戰旗等等z都是很小的,也就是說能夠很節省空間。而如果遊戲大量採用沒有重複圖塊的背景那麼tile並不會節省空間,但是也不會浪費多少空間。

  

  明天,我們繼續討論tile模式在速度中的意義,我們將結合對硬體如何實現tile模式進行討論。歡迎大家對這個問題發表意見,也請支援這個討論

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951709/,如需轉載,請註明出處,否則將追究法律責任。

相關文章