C_and_CPP 板


LINE

其實前面的碼表問題本來是希望能夠自己解決, 沒想到問的詞不達意還無法解決問題 囧 所以就直接問了! 音樂遊戲一定要藉由精準的時間判定來播放botton 該在幾秒案就該在幾秒按 雖然拍子跟秒數之間有公式可以算(bpm) 例如:150 bpm (即 1 分鐘 150拍 ) 但是算到後來一拍的時間也是幾百 ms 要如何計算從音樂開始播放後 每隔固定時間(拍子)播放botton 是我現在的瓶頸~~ 我有下載跳舞機模擬器( stepMania ) 的原始碼來看, 但是由於程式過於龐大, 目前只針對timeGetTime()尋找整個專案 找到相關程式碼如下: static bool g_bTimerInitialized; static DWORD g_iStartTime; static void InitTimer() { if( g_bTimerInitialized ) return; g_bTimerInitialized = true; timeBeginPeriod( 1 ); g_iStartTime = timeGetTime(); } int64_t ArchHooks::GetMicrosecondsSinceStart( bool bAccurate ) { if( !g_bTimerInitialized ) InitTimer(); int64_t ret = (timeGetTime() - g_iStartTime) * int64_t(1000); if( bAccurate ) { ret = FixupTimeIfLooped( ret ); ret = FixupTimeIfBackwards( ret ); } return ret; } uint64_t ArchHooks::FixupTimeIfLooped( uint64_t usecs ) { static uint64_t last = 0; static uint64_t offset_us = 0; /* The time has wrapped if the last time was very high and the current time is very low. */ const uint64_t i32BitMaxMs = uint64_t(1) << 32; const uint64_t i32BitMaxUs = i32BitMaxMs*1000; const uint64_t one_day = uint64_t(24*60*60)*1000000; if( last > (i32BitMaxUs-one_day) && usecs < one_day ) offset_us += i32BitMaxUs; last = usecs; return usecs + offset_us; } uint64_t ArchHooks::FixupTimeIfBackwards( uint64_t usecs ) { static uint64_t last = 0; static uint64_t offset_us = 0; if( usecs < last ) { /* The time has moved backwards. Increase the offset by the amount we moved. */ offset_us += last - usecs; } last = usecs; return usecs + offset_us; } 還是搞不懂他在幹啥? 或是有更好的方法嗎? --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 192.192.154.40
1F:→ MOONRAKER:我記得是我回你的嘛,那你是嫌我的回答不對就對了(火大) 04/25 21:58
2F:→ MOONRAKER:音樂開始的時候記錄一個{開始時間}=timeGetTime() 04/25 21:59
3F:→ MOONRAKER:以後你需要知道經過時間的時候就用 04/25 21:59
4F:→ MOONRAKER:timeGetTime()-{開始時間}就得到時距 04/25 22:00
5F:→ MOONRAKER:唔,第一行好像弄錯了 04/25 22:16
6F:→ crazytea:如果我想在固定時距做事可以嗎? 04/25 22:20
7F:→ crazytea:我知道取得時距的方式 但是固定時距做事就.... 04/25 22:22
8F:推 VictorTom:以前用BCB有Timer元件的時候我就直接用Timer就行了.... 04/25 22:23
9F:→ VictorTom:沒有Timer, 想得到的就是跑迴圈用M大提的func一直取時間 04/25 22:24
10F:→ VictorTom:時間差滿足條件就做事, 做完就等下一次時間差夠大這樣. 04/25 22:25
11F:→ VictorTom:只是, 要確保每一輪要做的事耗時不會超過時間間隔XD 04/25 22:25







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:WOW站內搜尋

TOP