SDL遊戲教程第三課 訊息 Events

2021-06-19 08:37:56 字數 3953 閱讀 5192

翻譯宣告:

本系列教程來自

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...