這個問題還是非常有難度的,F(xiàn)C游戲?qū)θ萘康目刂剖欠浅>_的,通常一款游戲也就幾十KB大小,游戲中的“圖形”自然不是以“圖片”的方式制作的。下面就來講解一下原理,希望大家不會被繞暈。
畫面分割
卡通塊與圖形字庫
調(diào)色板
音樂與音效畫面分割
組成FC游戲中畫面的最小單位是卡通塊,F(xiàn)C游戲的畫面是用一個個卡通塊(cell)拼出來的。每個網(wǎng)格就是一個cell,每個cell為8X8的點陣,與一個字符同樣大小。
《超級馬里奧兄弟》中,馬里奧在吃紅蘑菇之前為即由4個cell組成,當(dāng)吃了紅蘑菇之后身體長大一倍,變?yōu)橛?6個cell組成。
一個問號圖形也是由4個cell組合拼成的(磚也是),通常將4個cell組成一個元素成為block。
卡通塊與圖形字庫
cell有一個圖形字庫稱為CHR,這個庫的大小是16X16的,一次最多可定義256個cell,序號依次為0-255。游戲中的所有cell都是從CHR庫中調(diào)用出來的,因此游戲中的所有畫面的cell其實都是重復(fù)使用的,圖片容量就被限定在這16X16=256的CHR之中。
調(diào)色板調(diào)色板是用來給卡通塊上色的,F(xiàn)C一共可以用53種顏色,調(diào)色盤從這53種顏色里選取3種顏色,“透明”也算一種顏色(此時顯示背景的底色),一共4種顏色。這4種顏色用來給方塊上色。這就意味著每個方塊只能有4種色彩。
用《惡魔城》的背景舉例,將其分割為32×30 = 960 個cell,2×2 = 4個cell組成一個block
CHR沒有顏色或位置,以圖塊的形式定義
cell的定義操作極其簡單,系統(tǒng)規(guī)定一個cell由連續(xù)的四個內(nèi)存單元定義,第一個內(nèi)存單元指定cell顯示的Y坐標(biāo)、第二個為cell在CHR字庫中的序號、第三個為cell的顯示狀態(tài)(配色組合、左右翻轉(zhuǎn)、上下顛倒以及顯示于那個卡通頁面),第四個為cell顯示的X坐標(biāo)。編程中可任意指定定義卡通的內(nèi)存頁面。
調(diào)色板被分成幾部分,但是通過在不同區(qū)域之間共享顏色可以巧妙地隱藏這一事實。大門中間的紅色與周圍的墻壁融為一體,黑色背景模糊了城堡和大門之間的界限。
循環(huán)音樂為了節(jié)約容量,很多FC游戲都會使用循環(huán)音樂。有一些游戲為了保證更好的音樂和音效,還會單獨使用音樂音效增強元器件,在卡帶的硬件層面做處理。
2個方波(主旋律),1個三角波(低音),1個噪音波(高音),1個PCM(語音)
運動中的角色FC紅白機會將運動中的角色儲存于顯卡的特定內(nèi)置儲存區(qū)域,這樣我們看到的角色會以一個整體的結(jié)構(gòu)進行移動,就像上面提到的小馬里奧是4個cell拼成的一個整體。角色的顯示是覆蓋背景的,無論背景如何設(shè)置,在角色覆蓋到上層時會被設(shè)置成角色的顏色。
滾屏FC之前的游戲,在滾屏操作時幾乎要覆寫整個畫面,性價比非常低。FC內(nèi)部PPU可以預(yù)先儲存超過顯示部分的內(nèi)容,玩家在觸發(fā)滾屏操作后,可以移動游戲鏡頭。
FC顯示畫面與聲音原理非常復(fù)雜,大家就簡單了解一下吧,任天堂的黑科技太多了