當前位置: 華文問答 > 遊戲

FC 魂鬥羅的背景為何都是黑色的、夜晚的感覺,是為了省記憶體麽?

2017-07-27遊戲

Boss戰方面 @真把你打了 說得對,純色背景是因為boss本身的圖形也是用背景層實作的,一方面防止動起來露餡,一方面也是為了 節省Pattern Table容量 ,而後者也適用於boss戰以外的各種畫面。或者說,不是你省不省的問題,而是只有這麽多東西可用。

FC的視訊記憶體分配中,背景層Pattern Table只有128*128(2bit色),而整個螢幕輸出分辨率是256*240。也就是說, 最多只能有大約1/4的背景面積由完全不重復的圖形構成 。所以重復元素是必需的,你畫成石頭也好、樹林也好、雲彩也好,總之螢幕上一大半面積的影像都需要使用重復元素構成。

而最簡單的重復,莫過於純色顯示了。只要在256個8*8的Pattern塊當中留出1個純色塊,就可以復制平鋪出大面積的畫面。至於這個塊的顏色到底是黑色還是什麽其它顏色,只是色盤編號問題,執行起來效能是一樣的,無所謂——馬里奧的地上關背景就是藍色。只是黑色更適用於大部份氣氛比較成人的遊戲。

甚至你這個塊的圖案內容也可以是任意8*8的4色圖形,執行起來效能也是一樣的。當然論美工效果還是純色比較好看。例如我強行修改視訊記憶體內容,用$1E的pattern替換$00之後,原本看上去很自然的夜空就變成了下圖這種鬼畜的樣子。

所以很多遊戲選擇純黑背景的理由說來很簡單,只是 在機能限制下追求盡可能美觀的畫面

順便說一下,如果你想知道螢幕上哪些東西是背景、哪些是活動塊,沒必要跳起來一幀一幀截圖做實驗。FCEUX這樣的模擬器debug功能很強大,背景層和活動塊層可以分別選擇顯示或遮蔽,而且你可以即時檢視視訊記憶體內容。如圖:魂鬥羅1當中的炮台就是不折不扣的背景。

——————————

關於FC畫面渲染機理,請閱讀PPU rendering - Nesdev wiki或者我之前的一篇答案。

關於水平切割最佳化等「偽多卷軸」效果的實作,請閱讀FC遊戲的偽多卷軸。