翻譯宣告:
本系列教程來自
dev hub,一切解釋權歸原作者。我只是出自個人愛好,才翻譯了本系列教程。因為本人也是個初學者,而且英語水平有限,錯誤難免,望各路高手指正。
和遊戲開發基礎相關的有乙個叫事件(譯者注:events,我感覺還是訊息比較貼切,以後就譯為「訊息」)的模組。訊息是程式和使用者之間最基本的互動。乙個訊息可能來自鍵盤、滑鼠、遊戲杆、遊戲板等或者來自作業系統。要想處理好使用者和遊戲之間的互動,了解訊息的執行機制很重要。前面我們已經用過訊息了,雖然只是用來關閉視窗,現在我們就看看如何從使用者那裡接受訊息。
開啟cevent.h,新增如下**:
#ifndef _cevent_h_
#define _cevent_h_
#include
class cevent ;
#endif
非常強大的乙個類吧?好了,接著開啟cevent.cpp,並新增如下**:
#include "cevent.h"
cevent::cevent()
cevent::~cevent()
void cevent::onevent(sdl_event* event)
if ( event->active.gain ) oninputfocus();
else oninputblur();
break;
}if ( event->active.gain ) onrestore();
else onminimize();
break;}}
break;
}case sdl_keydown:
case sdl_keyup:
case sdl_mousemotion:
case sdl_mousebuttondown:
case sdl_button_right:
case sdl_button_middle:
}break;
}case sdl_mousebuttonup:
case sdl_button_right:
case sdl_button_middle:
}break;
}case sdl_joyaxismotion:
case sdl_joyballmotion:
case sdl_joyhatmotion:
case sdl_joybuttondown:
case sdl_joybuttonup:
case sdl_quit:
case sdl_syswmevent:
case sdl_videoresize:
case sdl_videoexpose:
default: }}
void cevent::oninputfocus()
void cevent::oninputblur()
void cevent::onkeydown(sdlkey sym, sdlmod mod, uint16 unicode)
void cevent::onkeyup(sdlkey sym, sdlmod mod, uint16 unicode)
void cevent::onmousefocus()
void cevent::onmouseblur()
void cevent::onmousemove(int mx, int my, int relx, int rely, bool left,bool right,bool middle)
void cevent::onmousewheel(bool up, bool down)
void cevent::onlbuttondown(int mx, int my)
void cevent::onlbuttonup(int mx, int my)
void cevent::onrbuttondown(int mx, int my)
void cevent::onrbuttonup(int mx, int my)
void cevent::onmbuttondown(int mx, int my)
void cevent::onmbuttonup(int mx, int my)
void cevent::onjoyaxis(uint8 which,uint8 axis,sint16 value)
void cevent::onjoybuttondown(uint8 which,uint8 button)
void cevent::onjoybuttonup(uint8 which,uint8 button)
void cevent::onjoyhat(uint8 which,uint8 hat,uint8 value)
void cevent::onjoyball(uint8 which,uint8 ball,sint16 xrel,sint16 yrel)
void cevent::onminimize()
void cevent::onrestore()
void cevent::onresize(int w,int h)
void cevent::onexpose()
void cevent::onexit()
void cevent::onuser(uint8 type, int code, void* data1, void* data2)
**有點多呵,不過應該已經覆蓋了所有的sdl訊息了。我們要做的很簡單,建立乙個sdl_event指標,然後根據其型別進行switch,並呼叫相應的函式。由於訊息比較多,所有**看起來有點長。
#include
#include "cevent.h"
#include "csu***ce.h"
private:
bool running;
sdl_su***ce* surf_display;
sdl_su***ce* surf_test;
public:
int onexecute();
public:
bool oninit();
void onevent(sdl_event* event);
void onloop();
void onrender();
void oncleanup();
};#endif
cevent::onevent(event);}
#include
#include "cevent.h"
#include "csu***ce.h"
private:
bool running;
sdl_su***ce* surf_display;
sdl_su***ce* surf_test;
public:
int onexecute();
public:
bool oninit();
void onevent(sdl_event* event);
void onexit();
void onloop();
void onrender();
void oncleanup();
};#endif
cevent::onevent(event);
}running = false;}
重新編譯一下,試試看。你應該可以像以前那樣退出程式。
我希望你能認真看看我們檢查的那些訊息。以後我們將在我們的遊戲裡用到某些訊息,現在你就先去熟悉熟悉吧。
跳到下一節課,看看建立我們的第乙個遊戲吧,tic-tac-toe.
sdl 訊息 —— 課程檔案:
win32:
zip,
rarlinux:
tar(多謝gaten)
python第三課答案 python第三課
字串操作 s alexwusir s1 s.capitalize 首字母大寫 print s1 全大寫,全小寫 s2 s.upper s21 s.lower print s2,s21 大小寫翻轉 s3 s.swapcase print s3 每個隔開 特殊字元或數字 的單詞首字母大寫 s alex ...
python第三課答案 python第三課筆記
以下哪個變數的命名不正確?為什麼?a mm 520 b mm520 c 520 mm d 520 mm 答 c不正確,不能數字開頭 在不上機的情況下,以下 你能猜到螢幕會列印什麼內容嗎?myteacher 小甲魚 yourteacher myteacher yourteacher 黑夜 print ...
python第三課答案 python第三課
1.迴圈物件,主要呼叫next 2.迭代器iterator 在理解上可以和迴圈物件理解為乙個東西。3.生成器 generator 自定義的迴圈物件。4.表推導 list comprehension 是快速生成表的方法。表推導用中括號。l x 2 for x in range 10 練習 f open...