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