OGF框架范例04 游戲環(huán)節(jié)
我對游戲開發(fā)的看法是要盡量將游戲細化,最基本的是將游戲劃分為多個環(huán)節(jié),每個環(huán)節(jié)盡可能獨立處理本環(huán)節(jié)的事情,所以於生出“CGameSection”這個類模板。在OGF中,當處于某一環(huán)節(jié)內,其它環(huán)節(jié)是不會收到任何消息的并且其內的物件也不會渲染,這使環(huán)節(jié)變得相對地獨立。
Sample04
簡介:游戲環(huán)節(jié)
使用游戲環(huán)節(jié)對游戲進行分階段管理.使用環(huán)節(jié)控制可以將整個游戲流程劃分為多個環(huán)節(jié),例如:SFLASH窗口環(huán)節(jié),菜單環(huán)節(jié),游戲環(huán)節(jié),結束環(huán)節(jié)等,具體視游戲大小而定.在此例中,會創(chuàng)建兩個環(huán)節(jié):CMenuSection, CMainSection,開始時會停留在MenuSection階段,有一個"Start"文本,當點擊后會轉換至CMainSection環(huán)節(jié),并實現(xiàn)Sample03的效果.
1.添加CMenuSection和CMainSection類,這兩類都是基于CGameSection類.
2.修改CMyGameBody類的OnInitialize事件,以在此創(chuàng)建CMenuSection和CMainSection類的實例.
//初始化事件
bool CMyGameBody::OnInitialize(){
//創(chuàng)建自定義的環(huán)節(jié)
CMenuSection* pMenuSection = new CMenuSection(MAIN_MENU_SECTION);
if(pMenuSection){
Add((IGameSection*)pMenuSection->QueryInterface(IID_IGameSection, VER_IGameSection), pMenuSection->GetSectionID());
}
m_pCurrentSection = (IGameSection*)pMenuSection->QueryInterface(IID_IGameSection, VER_IGameSection);
CMainSection* pMainSection = new CMainSection(GAME_PLAYING_SECTION);
if(pMainSection){
Add((IGameSection*)pMainSection->QueryInterface(IID_IGameSection, VER_IGameSection), pMainSection->GetSectionID());
}
return true;
}
3.在CMenuSection類中,重載OnInitialize()事件(用于添加"Start"按鈕)和OnMouseClick()事件(用于處理鼠標點擊事件),兩個事件的代碼如下:
//初始化事件
bool CMenuSection::OnInitialize(){
__super::OnInitialize();
//創(chuàng)建文本對象
CGameObjectText* pGOText = new CGameObjectText();
_SIZE siSize;
_POINT piPos;
siSize.cx = siSize.cy = 300;
piPos.x = 350;piPos.y = 300;
pGOText->Create("Start", siSize, "font1.fnt");
pGOText->SetText("Start");
pGOText->MoveTo(piPos);
//添加文本對象至指定環(huán)節(jié)下
m_pGameView->GetBy("default")->GetBy("default")->Add((IGameObject*)pGOText->QueryInterface(IID_IGameObject, VER_IGameObject), "Start");
return true;
}
//鼠標點擊
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;
}
4.在CMainSection類中,重載OnInitialize()及Sample03范例中,CMyGameBody類中的鼠標,鍵盤事件
5.將CMyGameBody類的鼠標,鍵盤事件移植到CMainSection類中(按相同的方法同的內容拷貝,注意要將m_pCurrentSection->GetGameView()改為使用CGameSection內部屬性m_pGameView).
5.編譯并運行項目
posted on 2007-09-10 23:52 lwq49 閱讀(862) 評論(0) 編輯 收藏 引用 所屬分類: 開源游戲框架