如果你的童年有過FC的陪伴,那你對以下的兩個(gè)情況肯定不會陌生: 1:閃爍 2:花屏 在信息的交流和獲取都非常落后的年代,大部分小伙伴都不清楚導(dǎo)致這種情況的原因。很多時(shí)候會以為自己的主機(jī)或者卡帶出了問題,進(jìn)而研究出了“吹氣修復(fù)法”等秘技。甚至,這些常見的現(xiàn)象,和某些信息混雜在一起,組合成了新的“傳說”,最典型的莫過于魂斗羅的“水下八關(guān)”——傳說在魂斗羅1代第六關(guān)的關(guān)底,刷新一個(gè)向右跑動的雜兵,然后跟著他跑,在進(jìn)入BOSS戰(zhàn)后小兵會花屏,這時(shí)候跳到他身上就能開啟水下八關(guān)。這條傳聞已經(jīng)被多次證實(shí)是子虛烏有的流言,在這里我就不展開了?;氐交ㄆ恋膯栴},為什么這個(gè)雜兵跑到這個(gè)位置就會花屏呢? 是主機(jī)的問題?還是卡帶的問題?或者是程序的問題? 其實(shí),這并不是什么BUG,也不是什么問題,只是FC的顯示方式導(dǎo)致的正?,F(xiàn)象。要想弄清楚這個(gè)問題,我們先來簡單了解一下FC的顯示原理。相信大部分玩家都知道,我們在顯示屏上看到的畫面都是由一個(gè)一個(gè)的像素點(diǎn)組成的。比如今天主流的1080P顯示器,就包含1920x1080總共約207萬個(gè)像素點(diǎn)。在這207萬像素的范圍內(nèi),每個(gè)像素點(diǎn)按需要顯示不同的顏色,最終組合呈現(xiàn)出一幅具體的畫面。 但是早期的游戲機(jī),比如今天要講的紅白機(jī)FC他其實(shí)并不具備按像素來控制和顯示畫面的能力。FC能顯示的基本單位是一個(gè)8*8像素的貼圖(字符塊),這些貼圖都是事先繪制好存儲在卡帶里面。使用的時(shí)候 根據(jù)程序的控制 就像拼積木一樣,用這些貼圖來拼合成最終的圖像。但是這個(gè)合成的過程并不是直接從卡帶里提取素材然后顯示到電視上。FC的程序會先把當(dāng)前畫面需要使用的貼圖提取到類似FC顯存的一個(gè)存儲空間中。這個(gè)空間非常的小,總共只有8K,而且其中一半只能用于角色、敵人等會運(yùn)動的元素的貼圖存儲。另一半則只能運(yùn)用于背景貼圖的存儲,所以一個(gè)關(guān)卡用到的全部貼圖是沒辦法全部都放進(jìn)來的,只能隨著關(guān)卡的進(jìn)行不停的更換其中的內(nèi)容。這些貼圖放到FC的顯存后,程序會去開發(fā)者指定的地址調(diào)取圖片來組合想要的畫面 為了大家直觀的理解上面說的這段內(nèi)容,我在下面的EXCEL里面簡單的畫了一副像素畫,最右邊的兩列代表FC卡帶中存儲的貼圖內(nèi)容,中間一列代表FC顯存中當(dāng)前存儲的內(nèi)容,最左邊表示顯示的結(jié)果。首先FC接收到程序的指令,需要調(diào)用顯存里的這幾個(gè)區(qū)域的圖片,然后根據(jù)程序指令,在FC顯存的對應(yīng)位置找到圖片,最后根據(jù)程序的指令拼合輸出最終的畫面,這就是一個(gè)完整FC畫面輸出流程。但是根據(jù)之前所說,由于FC的顯存里的內(nèi)容會根據(jù)游戲的需要進(jìn)行更換。如果因?yàn)槟承┨厥庠?,出現(xiàn)了本來不應(yīng)該存在當(dāng)前場景的物體,那么由于該物體原本需要的貼圖已經(jīng)被更換了,所以該物體便無法正常顯示。以實(shí)例來看的話,比如魂斗羅第六關(guān)關(guān)底,當(dāng)我們和小兵一起移動到BOSS區(qū)域后,程序切換了顯存里的貼圖素材,所以小兵之前正確的貼圖就被替換掉了,導(dǎo)致本不應(yīng)該出現(xiàn)在這里的小兵無法正確的顯示出來,也就是會出現(xiàn)所謂的花屏或者貼圖錯(cuò)誤了。包括很多FC邪道速通的錄像中,都能發(fā)現(xiàn)這種花屏的現(xiàn)象,其實(shí)都是因?yàn)樽寛鼍袄锍霈F(xiàn)了原本不應(yīng)該存在的物體導(dǎo)致的。請注意,這種情況在程序執(zhí)行的層面,其實(shí)并沒有什么問題,所以并不是什么BUG。只要在切換區(qū)域時(shí),加入一串消滅當(dāng)前所有雜兵的指令就可以規(guī)避這一情況,所以這頂多只算是一個(gè)程序優(yōu)化的問題。 至于另外一個(gè)經(jīng)常遇到的【問題】:閃爍 就更不是什么BUG了,F(xiàn)C在內(nèi)的早期游戲機(jī),顯示的圖像都分為精靈(可動塊)和背景兩類。雖然他們在卡帶的內(nèi)部,都是一塊塊由8x8像素點(diǎn)繪制成的貼圖,但是每一種圖形的顯示規(guī)則是不一樣的。背景類的圖形可以鋪滿整個(gè)屏幕。而精靈類的圖形,在FC游戲里只能顯示同屏最多64個(gè) 同一行最多8個(gè)。如果超出了這一限制,F(xiàn)C就會輪流來顯示這些貼圖但是因?yàn)槿搜鄣囊曈X暫留現(xiàn)象,所以在我們看來,就變成了圖像的閃爍,超過這一限制的數(shù)量越多,閃爍得也就越厲害。在發(fā)生閃爍的場景中按下暫停鍵 可以明顯的看到部分圖形是沒有被顯示的。FC幾乎所有的游戲都存在閃爍現(xiàn)象。 而且除此之外,F(xiàn)C的畫面顯示還有其他很多很多的限制規(guī)則,但是早期的開發(fā)者們巧妙的利用各種方式打破了機(jī)能的限制。為我們呈現(xiàn)了一幕幕精彩難忘的畫面。如果你對這些內(nèi)容感興趣,可以去看看我的《FC擴(kuò)展芯片介紹》視頻,希望有更多的玩家,能夠體會到早期游戲設(shè)計(jì)的精妙之處。 |