在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    像素兵團(tuán)滑鐵盧(像素兵團(tuán))

      原標(biāo)題《魂斗羅中的角色,趴下的時(shí)候總是要「蘿莉式屈腿俯臥」》,IT之家編輯酌情修改。

      游戲開發(fā)者勝勛作如下解釋:

      FC的圖形處理器(PPU)有如下的硬件限制:

      1、一幀畫面的同一個(gè)橫軸上,最多同時(shí)能渲染8個(gè)SPRITE。

      2、一個(gè)SPRITE為8×8 Pixel或者8×16 Pixel。

      所以,把角色盡量做成“上下長、左右短”的形狀,才可以避免角色的閃爍現(xiàn)象。

      

      另外,“改成下蹲也可以減少活動(dòng)塊兒”,此話甚是啊。

      問題是,魂斗羅需要趴下來躲避橫向飛過來的炮彈啊。

      如果把趴下改成下蹲的話,請(qǐng)看下圖——

      

      大炮發(fā)出的綠色炮彈,能直接打在魂斗羅的臉上,死定了。

      所以魂斗羅必須趴下。要么直腿趴下狂閃爍,要么蘿莉趴。

      有網(wǎng)友提到“不對(duì)吧,KONAMI的綠色兵團(tuán)是直腿趴下的?”

      所以我也做了截圖,請(qǐng)看下圖——

      

      藍(lán)人和紅人,同時(shí)趴下,橫面上又出現(xiàn)了3個(gè)小兵。

      藍(lán)人問紅人:你的頭哪去了?

      紅人回答說:FC同軸最多顯示8個(gè)SPRITE,讓我們一起閃爍吧

      于是乎,請(qǐng)接著看下面一系列的圖——

      

      

      

      藍(lán)人說:哎喲!我的腳哪去了?

      呵呵,這些圖是連續(xù)的靜態(tài)畫面。

      實(shí)際游戲畫面里是各個(gè)角色一頓輪番閃爍的。

      Thinkraft表示以上勝勛的答案說得不錯(cuò)。要繼續(xù)補(bǔ)充一些額外信息。

      首先是關(guān)于活動(dòng)塊(Sprite)。

      為了最大限度利用資源、提升表現(xiàn)效果,2D卷軸時(shí)代的游戲機(jī)基本上都是背景+活動(dòng)塊+色盤的設(shè)計(jì),我以前在《拳皇中的人物變色是如何實(shí)現(xiàn)的?- Thinkraft的回答》中提到過MVS的實(shí)現(xiàn),這里說說FC的。

      由于PPU機(jī)能限制,F(xiàn)C每個(gè)水平掃描行只能顯示8個(gè)活動(dòng)塊。

      FC的PPU運(yùn)行頻率是5.36MHz,輸出256*240@60Hz畫面。具體原理在維基百科中有很詳細(xì)的介紹,我這里簡(jiǎn)單總結(jié)一下:

      每秒60幀,每幀渲染262行(其中240行輸出可見圖像,其余空閑時(shí)間用于寫入顯存數(shù)據(jù)),每渲染一行使用341個(gè)PPU cycle。其中每個(gè)背景塊需要8個(gè)cycle處理;每行有32個(gè)背景塊(256/8),因此光是背景處理就需要256個(gè)cycle;此外每個(gè)活動(dòng)塊也需要8個(gè)cycle處理,再扣掉預(yù)讀下一行數(shù)據(jù)的時(shí)間,最后結(jié)果就是設(shè)計(jì)上只允許顯示8個(gè)活動(dòng)塊。

      如果游戲在同一掃描線上存在超過8個(gè)活動(dòng)塊,多余的將不會(huì)被顯示。

      一個(gè)可行的解決方案是利用人眼視覺暫留效果,使用Flicker(閃爍),即輪流顯示這些活動(dòng)塊——同一幀內(nèi)的靜態(tài)圖像還是只有8個(gè),動(dòng)起來就能看到全部了。

      程序員必須手動(dòng)實(shí)現(xiàn)Sprite優(yōu)先級(jí)的調(diào)整,以保證游戲效果——如果敵人的子彈總是隱形的,玩家就要摔手柄了。

      除了同屏活動(dòng)塊總數(shù)限制(64個(gè))、同掃描行顯示限制(8個(gè))之外,還有一個(gè)重要限制是Palette(色盤)。

      

      FC定義了64個(gè)系統(tǒng)顏色,去掉不可用的和重復(fù)的是53個(gè)(也有說法是54或55)。所謂色盤,就是從這53個(gè)顏色中挑出4個(gè),編上號(hào),供圖塊使用,也就是說FC的每個(gè)色盤只有4色——實(shí)際上是3色,因?yàn)楸尘皦K的0號(hào)色必須是通用背景色,而活動(dòng)塊的0號(hào)色必須是透明。系統(tǒng)支持4個(gè)背景塊色盤和4個(gè)活動(dòng)塊色盤。

      每個(gè)活動(dòng)塊只能使用一個(gè)色盤。換句話說, 單個(gè)活動(dòng)塊只能顯示3種顏色。

      那么,來看看FC魂斗羅的圖片吧:

      

      這個(gè)趴姿射擊的圖片,尺寸是32*16,總共用到了8個(gè)8*8的活動(dòng)塊(或者4個(gè)8*16,這里暫且認(rèn)為是前者)。你可以清晰地看到,左半的4個(gè)活動(dòng)塊和右半使用了不同色盤,導(dǎo)致上臂部分都變色了。

      由于槍伸出太多,光是上半身就占用了一大半寬度。如果把腿放平,最少也要再加一個(gè)活動(dòng)塊才可以。

      再看看主角死亡時(shí)的圖片:

      

      注意褲腰的位置,上半身只占了一小半寬度。于是這次終于有一條腿可以伸平了。另一條腿彎著可能是多少想顯得立體一些吧。

      總之,我的結(jié)論和勝勛是相同的: 就FC魂斗羅而言,趴姿屈腿是為了節(jié)省活動(dòng)塊,不蹲是因?yàn)槎紫露悴贿^子彈。

      ——所以你看,這是畫風(fēng)問題(大誤)。

      

      然后再說說題主編輯的關(guān)于角色尺寸的疑問「測(cè)量了一下發(fā)現(xiàn)人物臥姿長度有36個(gè)像素」。這個(gè)追問其實(shí)根本就是無效的——我這里嚴(yán)重懷疑題主的模擬器截圖精確性,比如不小心拉伸了一下窗口導(dǎo)致畫面變形之類的。

      

      續(xù)作中重繪了角色動(dòng)作,下半身的取色也被調(diào)整了。然而整體寬度依然是32像素(4*2個(gè)活動(dòng)塊)。

      最后,問題并沒有完全解決。因?yàn)橐陨险f的都是FC版(1988)的情況,而魂斗羅原作是街機(jī)游戲(1987)。

      如圖,原作中的趴下也是屈腿。

      

      本來想回答得更確切一些,但我并沒有找到明確靠譜的關(guān)于這個(gè)機(jī)臺(tái)的硬件信息??紤]到當(dāng)年的游戲機(jī)畫面原理大同小異,只是性能的區(qū)別(例如后來的MVS,同一水平線支持96個(gè)寬度為16像素的活動(dòng)塊),這個(gè)屈腿動(dòng)作應(yīng)該也是相同的原因。

      上圖中角色的寬度是48像素,正好是8(或16)的整數(shù)倍。

      微信搜索“IT之家”關(guān)注搶6s大禮!下載IT之家客戶端(戳這里)也可參與評(píng)論抽樓層大獎(jiǎng)!

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
    (0)
    用戶投稿
    上一篇 2023年8月6日 12:04
    下一篇 2023年8月6日 21:10

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息