游戲中離不開計(jì)時(shí)器,多多少少需要定時(shí)處理某些事情,例如:倒計(jì)時(shí),進(jìn)度條,AI控制等.OGF框架內(nèi)置了一個(gè)計(jì)時(shí)器系統(tǒng),提供了一個(gè)獨(dú)立線程去處理這些任務(wù),間隔最少可達(dá)到5毫秒.
Sample05
簡(jiǎn)介:計(jì)時(shí)器.
該范例運(yùn)行后會(huì)先顯示"Start"按鈕,點(diǎn)擊后會(huì)在屏幕中心顯示一個(gè)秒數(shù)計(jì)數(shù)器,每秒遞增1,一直至程序結(jié)束為至.
1.刪除CMainSection類中所有的鼠標(biāo),鍵盤回調(diào)處理事件(因?yàn)楸纠胁辉儆玫?
2.創(chuàng)建計(jì)時(shí)器,該計(jì)時(shí)器應(yīng)該在"Start"按鈕點(diǎn)擊后激活,我們可以放在CMenuSection類的點(diǎn)擊事件處理,點(diǎn)擊后就切換至游戲環(huán)節(jié).
//鼠標(biāo)點(diǎn)擊
bool CMenuSection::OnMouseClick(IGameObject* pGameObject, float x, float y, int nType, int nKey){
CString szName = pGameObject->GetObjectName();
if(szName=="Start" && nType == INPUT_MBUTTONDOWN){
m_lpFMHandles->pGameBody->SwitchSection(GAME_PLAYING_SECTION);
}
return true;
}
3.為了體現(xiàn)CGameSection的環(huán)節(jié)管理,我們會(huì)將這個(gè)激活動(dòng)作,放在CGameSection的OnSectionIn()事件中執(zhí)行,該事件是在環(huán)節(jié)之間的切換被調(diào)用的,即意味著由CMenuSection切換至CMainSection時(shí)被回調(diào).(記得了,要在CMainSection類中重載OnSectionIn方法)
//進(jìn)入環(huán)節(jié)事件
bool CMainSection::OnSectionIn(WORD wBeforeSection){
//返回OnInitialize事件創(chuàng)建的文件對(duì)象
IGameObject* pGameObject = m_pGameView->GetObject("default\\default\\Text");
//設(shè)置一個(gè)定時(shí)器,事件ID為1,每1秒通知1次,無限次循環(huán)
theGame->GetTimerEngine()->SetTimer(1, 1000, TIMER_REPEAT_TIMER, (WPARAM)(pGameObject));
return true;
}
4.重載計(jì)時(shí)器事件回調(diào)OnEventTimer()方法.該方法有兩個(gè)參數(shù):wTimerID(指明回調(diào)的計(jì)時(shí)器ID,若系統(tǒng)有多個(gè)計(jì)時(shí)器則由該ID區(qū)分)和wBindParam(由計(jì)時(shí)器創(chuàng)建時(shí)設(shè)計(jì)好的回調(diào)參數(shù),通常是待處理的對(duì)象).為方便起見,在該方法中,我們定義了一個(gè)static的變量:nTimer,每次該方法被調(diào)用,則該變量自加1,由Text對(duì)象輸出至屏幕.
//定時(shí)器事件
bool CMainSection::OnEventTimer(WORD wTimerID, WPARAM wBindParam){
static INT_PTR nTimer = 0;
if(wTimerID==1){
//返回綁定的參數(shù)
IGameObject* pGameObject = (IGameObject*)wBindParam;
IGameObjectText* pGOText = GET_OBJECTPTR_INTERFACE(pGameObject, IGameObjectText);
//生成時(shí)間字串
char szText[128];
sprintf(szText, "Timer:%d", nTimer++);
//設(shè)置為Text對(duì)像的輸出內(nèi)容
pGOText->SetText(szText);
}
return true;
}
4.編譯并運(yùn)行項(xiàng)目
運(yùn)行結(jié)果:
