第一章:多平臺支持。
2014打算先寫一個遊戲框架,然後通過這個框架再寫遊戲。
本人自學,如有誤導,請讀者見諒。
想法:
現在的操作系統很多,寫一款遊戲要在多個平臺上運行應該是一個樸素的需求。
本文接下來將介紹如何在 window,wp8,android,mac,ios,linux 上創建一個項目,而遊戲代碼都是共用的。
除了wp8使用微軟的框架外,其他都將集成SDL做開發。
遊戲常見的邏輯:
while(true){
doEvent()
show()
}
本實例的實際代碼:
int main(int argc, char *argv[]) {
//遊戲引擎初始化
int iRet = g_SkComm.init();
if (iRet != 0) {
g_SkComm.log("[%s][%d]g_SkComm.init!=0\n", __FILE__, __LINE__);
exit(0);
}
//顯示模塊初始化
g_SkShow.init(g_SkComm.getRenderer());
Sint64 siGameBegin = g_SkGameTimer.getGameMTime();
g_SkGameTimer.m_siGameLastTime = siGameBegin;
g_SkGameThread.run(g_SkGameTimer.m_siGameLastTime);
Sint64 siShowBegin = siGameBegin;
//g_SkComm.msleep(3000);
//g_SkComm.myexit();
while (true) {
SkEvent event;
while (g_SkComm.poll_event(&event)) {
g_SkGame.doEvent(&event);
}
Sint64 iCurTime = g_SkGameTimer.getGameMTime();
while (g_SkGameTimer.m_siGameLastTime + g_SkGameTimer.siGameLoopMsec
< iCurTime) {
g_SkGameTimer.m_siGameLastTime += g_SkGameTimer.siGameLoopMsec;
g_SkGameThread.run(g_SkGameTimer.m_siGameLastTime);
}
bool bShow = true;
while (siShowBegin + g_SkGameTimer.siShowLoopMsec < iCurTime) {
siShowBegin += g_SkGameTimer.siShowLoopMsec;
if (bShow) {
g_SkGame.show(&g_SkShow);
g_SkShow.flush();
bShow = false;
}
}
//g_SkComm.log("[%s][%d]\n", __FILE__, __LINE__);
g_SkComm.msleep(SkGameTimer::siGameManLoopMsec);
}
g_SkComm.myexit();
return 0;
}
爲了實現平臺兼容,我將SDL的調用做了下封裝。這樣以後不使用SDL,那麼遊戲代碼也是可以複用的。
windows平臺的支持:
1.首先用eclipse創建一個android的遊戲項目。(可以參看我前面的文章)
2.遊戲目錄結構如下:
遊戲主函數放在 jni\src 目錄下
3.創建一個windows目錄,用來放在window平臺下編譯的相關文件。
4.windows 目錄下創建一個Makefile文件,類似
INC=-I../jni/src -I../jni/sk_include -I../jni/SDL/include -I../jni/SDL_image -I../jni/SDL_net -I../jni/SDL_ttf
SRC=../jni/src/*.cpp ../jni/sk_src/*.cpp ../jni/sk_game/*.cpp
LIB=-L./lib -lmingw32 -lSDL2_net -lSDL2_mixer -lSDL2_ttf -lSDL2_image -lSDL2 -lSDL2main
all:
g++ -D__SKYPARK_WIN__ -Wall -O2 -o SkyparkGame.exe $(SRC) $(INC) $(LIB)
clean:
rm SkyparkGame.exe
5.下載安裝mingw
6.編譯運行
7.效果
等多平臺都完成了,附上代碼。