
你正在玩《水果忍者》,一個西瓜飛了上來。
如果你有看過本系列上一篇文章《游戲和動畫有什么不同?》,你就會知道,你的iPhone這時正在努力地把這個西瓜從一個狀態(tài)變到另一個狀態(tài)。
如果你沒看過或者忘記了,沒關(guān)系,我們先簡單回顧一下什么叫狀態(tài)。
所謂的狀態(tài)就是游戲里的參數(shù),例如剛才這位西瓜,它的位置就是一個參數(shù)。狀態(tài)會隨著時間變化:一開始這個西瓜的位置在屏幕的左下角,過一會兒它的位置在屏幕正上方,再過一會兒它又移到屏幕右下角去了。西瓜的位置在變,等于說游戲的狀態(tài)在變,每變化到一個新狀態(tài),游戲都會根據(jù)這個狀態(tài)下的參數(shù),把西瓜重新畫到屏幕上,然后,iPhone繼續(xù)計算出下一個狀態(tài)的參數(shù),如此循環(huán)不息,游戲就一直運(yùn)行下去。
ok,上一篇文章其實就講了這么個事,現(xiàn)在,我們討論下西瓜是怎么被切掉的。
如上所述,當(dāng)西瓜飛上來時,游戲正在從一個狀態(tài)跳到下一個狀態(tài),這時, 你的iPhone突然感到自己被人劃了一下,敏感的它會立刻把“擦,我被劃了一下”這件事通知游戲。
具體怎么通知呢?它把這件事插入到當(dāng)前狀態(tài)之后。
本來如果沒這事,游戲畫完當(dāng)前這一幀后就會跳到下一狀態(tài),現(xiàn)在出了這事,它畫完當(dāng)前幀后就沒法立刻跳到下個狀態(tài),它得先處理這個事,等處理完了,再跳到下一個狀態(tài)。所以我們說,“我被劃了一下”這件事被插入到兩個狀態(tài)之間。
那么,一個很自然的問題是:游戲怎么處理這件事?
事實上,游戲?qū)@件事的處理,本質(zhì)上還是在改變西瓜的參數(shù)。我們假設(shè)西瓜除了“位置”以外,還有一個叫做“爆否”的參數(shù),在處理這個事件的時候,游戲把這個參數(shù)由原來的0(表示沒爆)改寫成1(表示爆啦)。改寫完后,游戲就把這事忘記了,繼續(xù)跳到下一個狀態(tài)。在新的狀態(tài)里,游戲照例會根據(jù)參數(shù)來畫西瓜。這時,它猛然發(fā)現(xiàn)“爆否”這個參數(shù)居然不等于0,而是等于1!天哪!這意味著這個西瓜爆了!盡管對這個西瓜滿懷不舍,游戲還是不得不把西瓜爆掉的畫面畫出來,因為畫面是由狀態(tài)說了算的。所以西瓜就是這么被切掉的。
導(dǎo)致西瓜被切掉的,是“iPhone被劃了一下”這件事,這在游戲開發(fā)里叫用戶事件,從游戲者的角度來看,用戶事件則是由輸入設(shè)備觸發(fā)的。
隨著游戲設(shè)備越來越豐富,輸入方式也越來越多:從紅白機(jī)的手柄,電腦的鼠標(biāo)鍵盤,到移動設(shè)備的觸控和重力感應(yīng),再到狂拽炫酷的體感設(shè)備,不一而足。想象一下聲控的Flappy Bird吧,喊一聲跳一下,是不是歡樂。
電影《阿凡達(dá)》里,主角自己無法站起來,但他能通過意識輸入來控制Avatar,就像在玩一款游戲。Avatar這個詞來自印度教,有神靈下凡、附體的意思。所以當(dāng)你點開《神廟逃亡》,用你牛逼閃閃的操作控制著主角左蹦右跳時,背后的魔鬼肯定吐槽:神人附體啊臥槽。
在《游戲和動畫有什么不同?》里,我們說游戲本質(zhì)上是狀態(tài)機(jī),現(xiàn)在我們可以說,它是一個可以和人互動的狀態(tài)機(jī)。它接收來自游戲者的信息, 改變自身狀態(tài),通過畫面或聲音把新的狀態(tài)告訴游戲者,游戲者又根據(jù)這些畫面輸入新的信息,如此往復(fù),造就了游戲里的另一個循環(huán)。