【翻譯】音游開(kāi)發(fā)速成:來(lái)自Bemuse作者的提示(作者:5argon)
【文章原載于https://exceed7.com/native-audio/rhythm-game-crash-course/tips-from-bemuse.html,授權(quán)翻譯轉(zhuǎn)載,再次轉(zhuǎn)載請(qǐng)聯(lián)系原作者獲取授權(quán)?!?/span>
【系列文章目錄】
來(lái)自Bemuse作者的提示

Bemuse(http://bemuse.ninja/)是一個(gè)基于HTML5技術(shù)、React、Redux和Pixi.js的在線web音游,其作者@dtinth(https://github.com/dtinth)分享了他的一些關(guān)于延遲的技術(shù)。感謝@dtinth!
我們?cè)赪eb環(huán)境中沒(méi)有訪問(wèn)本地資源的權(quán)限,所以我開(kāi)發(fā)Bemuse的時(shí)候無(wú)法控制延遲,不得不做了很多應(yīng)變工作。(順便說(shuō)一下,瀏覽器一直在對(duì)此進(jìn)行改進(jìn)。例如我的Android設(shè)備上的Chrome曾經(jīng)延遲高達(dá)120 ms以上,而現(xiàn)在是70 ms左右)。
延遲過(guò)大的問(wèn)題:在高延遲設(shè)備上,我們可以仿照Guitar Hero將反應(yīng)音效(raction sound)轉(zhuǎn)換為分層音效(layer sound)。當(dāng)延遲高于10 ms時(shí),Bemuse會(huì)切換到另一種模式。它將在玩家敲擊鍵盤(pán)前自動(dòng)播放key音,但如果玩家沒(méi)有擊中Note,那么之前播放的聲音就會(huì)被取消,并且暫時(shí)禁用自動(dòng)播放功能。直到玩家擊中了另一個(gè)Note,自動(dòng)播放模式才會(huì)重新啟用,但這個(gè)Note聽(tīng)起來(lái)會(huì)很晚,這是一個(gè)權(quán)衡點(diǎn)。另外,如果玩家在某個(gè)Note上打出了OFFBEAT判定【譯注:這是Bemuse的最差擊中判定】,那么作為懲罰,該Note的音高會(huì)稍微偏移。
與音頻時(shí)間同步的問(wèn)題:在Web環(huán)境中,AudioContext.currentTime也可能以非連續(xù)的步驟進(jìn)行更新。該問(wèn)題僅在某些瀏覽器/操作系統(tǒng)中出現(xiàn),當(dāng)緩沖區(qū)刷新時(shí)才會(huì)更新該值,而非“實(shí)時(shí)”更新。Bemuse通過(guò)持續(xù)采樣并收集偏移增量(dspTime - 游戲時(shí)間)來(lái)繞過(guò)這個(gè)問(wèn)題。游戲?qū)ι弦幻雰?nèi)的多個(gè)偏移增量求均值,并依據(jù)該值從游戲時(shí)間測(cè)定真實(shí)音頻時(shí)間。這意味著緩存超載和音頻跳躍不會(huì)導(dǎo)致游戲內(nèi)容的突然跳躍。Note會(huì)滾動(dòng)得更快或更慢,從而跟上dspTime。
幀間輸入問(wèn)題:我們可以將點(diǎn)擊動(dòng)作發(fā)生的時(shí)間考慮成兩幀之間的時(shí)間范圍,而不是當(dāng)做發(fā)生在一個(gè)時(shí)間點(diǎn)上的事件。權(quán)衡點(diǎn)在于判定將在幀率下降時(shí)會(huì)變得更寬松,但我覺(jué)得幀率下降本身就已經(jīng)是一種懲罰。
另一種視覺(jué)輔助是用顏色去編碼不同的節(jié)奏類(lèi)型(四分音符/強(qiáng)拍、八分音符/弱拍、十二分音符/三連音等)。這讓玩家可以游玩非?;H说淖V面,例如英國(guó)視奏錦標(biāo)賽的這張譜:https://youtu.be/F69zEKYVLHE。
【譯注:站內(nèi)視頻可參考

與原文是同一視頻】