2015-06-09 26 views
3

我目前正致力於製作一款受吉他英雄和火焰感染啓發的遊戲,迄今爲止一切進展順利 - 我已經編寫了一個腳本,可以解析由FeedBack Editor生成的.chart文件轉換成可用數據。吉他英雄般的計時機制

我的擔心是如何去確保時間是正確的_(我將不得不將這些節拍值轉換爲ms)_?我解析的文件保存着這些值;

0 = N 1 120 
120 = N 2 120 
240 = N 3 576 

當第一個整數是什麼打敗應該發生的音符,N是說明是否是一錘,然後在鋼絲ID_(綠色或紅色等)_和音符的長度,再次在節拍中。

我很擔心,如果突然出現FPS滯後峯值,歌曲很容易失去同步,那麼可以通過什麼方式來防止歌曲不同步呢?

我試圖找出他們如何確保筆記上的時間是正確的來源,但我似乎無法找到任何有用的東西。

+0

大多數歌曲不符合嚴格的節奏,所以像.chart這樣的摘要對於保持與錄音同步過於簡單。用更嚴格的速度選擇歌曲並使用量化預處理音樂將有所幫助。它看起來並不像你知道什麼時候第一拍,所以我也建議在那裏進行預處理。否則,你將不知道什麼是不同步的原因。我建議用一個簡單的電子節拍器記錄進行調試。 – ryanpattison

回答

1

這是一個難題,因爲它取決於您的音頻播放器API。爲了使其正常工作,您需要在播放器中具有返回當前播放位置的功能。假設您的播放器API具有以毫秒爲單位獲取位置的方法。

我會在本機代碼中執行同步,因爲如果您在lua中使用該值,則GC可能會觸發並導致您不同步。只需使用lua解析定時併爲本地代碼設置結構數組(或類似的東西)。

+0

我想我可能已經把水壓在了我的頭上:P問題是我在另一場比賽中使這個......「遊戲」。 我正在腳本編寫的遊戲確實使用了BASS庫,所以我能夠獲取並設置聲音位置 - 但它使用秒,而不是毫秒 - 所以它不會很準確。 – Dealman

+0

@丹尼斯使用秒,但在浮點數,所以分數是毫秒,不是? – ryanpattison

+0

@rpattiso:你確實是對的,它會返回一個帶有大量小數的浮點數 - 7.5110430839002。有誰知道像Frets on Fire和Guitar Hero這樣的遊戲如何確保筆記在開頭的時間是正確的? 我無法找到任何關於此事的有用信息,我確實相信一個重製的Frets on Fire,名爲FoFix或其他東西是開源的 - 猜我可能會尋找,也許我可以找到一些線索:) 編輯:爲了澄清一點,我不完全確定如何使用與BPM相關的第一個值。 – Dealman