討論區快速選單
知識庫快速選單
網路投保旅行平安險 軟體開發過程中有哪些資安漏洞? 掌握Salesforce雲端管理秘訣
[ 回上頁 ] [ 討論區發言規則 ]
使用timeGetTime模擬真實時間的問題
更改我的閱讀文章字型大小
作者 : turtle314(特透)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/10/26 下午 03:05:11
小弟最近在寫一個音樂類型遊戲
在程式中有搭配timeGetTime函式來模擬真實時間
用真實時間來算出按鈕出現時間
函式程式碼如下:
if(gettime == 0){
starttime=timeGetTime();
gettime=1;
}
currenttime=timeGetTime();
if(currenttime-starttime >= 10){
timemin+=1;
gettime=0;
}

為了要讓可以使用的單位增加,我把原本的單位從秒轉為1/10秒
但在程式執行中發現如果將秒數在分為十份後,開始會有累進誤差
大概粗略的用碼表對了一下發現真實時間跑到10秒時,timeGetTime函式卻只跑到8秒多左右
想請教有辦法修正此函式嗎?
作者 : kamino(螞蟻)
[ 貼文 141 | 人氣 7475 | 評價 230 | 評價/貼文 1.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人turtle314註記此篇回應為很有道理 2010/10/29 下午 03:02:32
你在好多地方發問啊…

你時間怎麼算的?用timemin?
timeGetTime()取得的是毫秒,每10毫秒算一次,取得的是100分之1秒,而不是10分之1秒喔

你>=10時timemin+=1
但>=10可能是12、14、19甚至25、26
你都嘛+=1
那當然算起來就少了時間

而且從gettime=0;到starttime=timeGetTime();經過了多久?
這段時間你都沒計算
零零碎碎的時間加起來
誤差就產生了
作者 : turtle314(特透)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/10/31 下午 09:12:52
>
>你>=10時timemin+=1
>但&>=10可能是12、14、19甚至25、26
>你都嘛+=1
>那當然算起來就少了時間
>
>而且從gettime=0;到starttime=timeGetTime();經過了多久?
>這段時間你都沒計算
>零零碎碎的時間加起來
>誤差就產生了
>
不好意思 可以講得更詳細一點嗎
我還是不太了解要怎麼樣減少誤差
如果我把cpp分成多個cpp可以減少誤差嗎?
先謝大大了
作者 : jonay(jonay) VC++優秀好手C++ Builder優秀好手C++優秀好手貼文超過500則
[ 貼文 887 | 人氣 8025 | 評價 5030 | 評價/貼文 5.67 | 送出評價 30 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/11/1 上午 06:50:08
其實你寫的我的看不懂

請自行google 高精度"定"時器
作者 : kamino(螞蟻)
[ 貼文 141 | 人氣 7475 | 評價 230 | 評價/貼文 1.63 | 送出評價 18 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/11/1 上午 09:14:26
我不知道你其它code怎麼寫的
但總之你應該先停用timemin這個東西
又或者把它的單位改成ms,然後再自己處理
比如說:
timemin += currenttime - starttime;
然後要以100分之1秒來取單位時,用
int t = timemin / 10;
來做計算

另外就是下一次的starttime實際上應該就是這一次的currenttime
所以你在>= 10裡面就應該直接設starttime = currenttime;
這樣才不會有時間的誤差出現
至於上面那一段if( gettime == 0 )的,你要自己想辦法弄掉
只要給starttime一次初值就行了
作者 : cndv3996(忠义;哥)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2011/7/8 下午 01:11:38
楼上正解。。。。

int g_nStartTime;

void init_timer()//播放音乐前只执行一次
{
    g_nStartTime = ::timeGetTime();
}

int GetElapsedSeconds()
{
    return ( ( ::timeGetTime() - g_nStartTime ) / 1000 );
}
 板主 : 小呆 , 冷眼
 > 遊戲程式設計 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 遊戲程式設計 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
遊戲程式設計
1 aming 2280 
2 冷眼 1450 
3 阿西德倫 510 
4 PLAYER 390 
5 garf 340 
6 Akira 330 
7 白老鼠(Gary) 290 
8 BlueTulip 270 
9 東昇 250 
10 CCL 240 
遊戲程式設計
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.0625