作者crushcrush (睡不醒)
看板GameDesign
標題[程式] 用XNA寫音樂遊戲遇到的一些問題
時間Mon Feb 8 01:17:10 2010
我是XNA的初學者
因為畢業專題要想用XNA寫出一款音樂遊戲
但遇到一些問題查不太到資料可以解決...
XNA在國外的論壇比較活躍,華語區討論的人似乎不多?
偏偏我又英文苦手...
這款音樂遊戲架構和太鼓達人、BeatMania類似
就是音符落到指定地點時需按下相對應的按鈕以消除音符並發出音效
我的問題是
1.要怎麼把音符的顯示和音樂節拍綁在一起呢?
我的寫法很陽春,是在選完歌進入打譜介面時產生一個變數
此變數計算進入打譜介面後的遊戲時間
然後在到達指定時間時,產生一個圖案
並告訴該圖案往指定方向移動。
可是這做法讓「圖案無法在音樂的節拍上」,十次測試十次都會有不一樣的誤差...
目前看來是因為程式進入打譜介面後需要一點時間讀取音樂檔
或是開啟mediaplayer的時間(我是呼叫mp來播放)
而每次讀取音樂檔、開啟mp需要時間不同所致
我曾經嘗試把變數改成去抓音樂的播放時間
但XNA跟我說這個播放時間不能拿來當變數使用...
雖然有抓到一個類似吉他英雄程式的範例檔
但程式碼太複雜,註解又都是英文...實在難以理解
有沒有人知道該用什麼方法、邏輯來寫會比較好?
2.程式在讀取音樂、影片檔的時候總需要一些讀取時間
這導致遊戲執行起來有很不順暢的感覺
該如何知道程式正在讀取檔案,並做出一個讀取畫面呢?
3.選單切換的動態效果,我曾直接指定一堆圖片
不斷重新繪製他們的位置、透明度等...來試著達到動態選擇、切換效果
圖片少的時候看來沒問題,但圖片一多起來會delay...
像這種選單選擇與選擇後切換介面的動態效果有沒有什麼比較好的寫法?
這是目前遇到的幾個比較大的問題
如果有解釋不清的地方請直接提出我會再補述
如果有失禮的地方請見諒 Orz
先謝謝各位了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.134.245.117
1F:推 NDark:你要不要先測試cpu不同loading下 音樂會不會播放速率不同? 02/08 16:33
2F:推 Transformers:根本作法 把英文練好 參考成功遊戲的教學 02/08 19:46
3F:推 Bencrie:把英文練好比較實在 +1 02/08 20:30
4F:→ Splash5:音符的出現時間要跟frame對 而不是時間差 02/08 20:52
5F:推 teexit:我比較好奇你那段圖片移動的update怎麼寫的... 應該是有 02/08 21:54
6F:→ teexit:考慮到frame的部分吧... 要不然這樣你跑N次N次都不一樣 02/08 21:55
7F:→ crushcrush:畢專的時間不夠把英文練好 囧 基礎的說明是都看得懂 02/09 05:59
8F:→ crushcrush:但複雜的程式碼加上看得似懂非懂的註解對我這程式新手 02/09 06:00
9F:→ crushcrush:而言太難理解了... 02/09 06:00
10F:→ crushcrush:計算遊戲時間的變數是自進入打譜介面開始每秒更新30次 02/09 06:01
11F:→ crushcrush:以每秒30格來計算frame,音符出現是跟著這frame計數器 02/09 06:03
12F:→ crushcrush:請問這樣算是有對在frame上嗎?還是我根本就搞錯方向? 02/09 06:03
13F:→ crushcrush:音符的移動是用遊戲每update"n"次就移動一次指定距離 02/09 06:03
14F:→ crushcrush:我想說這樣可以透過改變n來調整音符的移動速度 02/09 06:04
15F:→ crushcrush:移動速度是固定的,應該不是音符移動造成的誤差? 02/09 06:04
16F:→ crushcrush:突然想到如果是呼叫mediaplayer出來播的話... 02/09 06:05
17F:→ crushcrush:即便程式掉格、delay,音樂似乎能不受影響正常播放? 02/09 06:06
18F:→ crushcrush:這樣一來不管怎樣寫好像都會有誤差...Orz 02/09 06:06
19F:→ crushcrush:謝謝各位的指導,我繼續研究看看 >"< 02/09 06:07
20F:→ help0430:update 有傳時間參數給你~要用阿! 02/09 09:24
21F:→ help0430:不能用呼叫update次數來做,每台電腦快慢不同 02/09 09:26
22F:推 NDark:有關fps的重要性麻煩回去翻一下拙作... 02/09 09:39
23F:→ crushcrush:謝謝,我大概有點概念了 02/10 00:09