Transcript EVENT

EVENT
プログラミングのスタイル
手続き型:
ある決められた場所から開
始され, その後は純粋に上
から下に流れて行く方式. 実
行したいことを, 順番に記述
してゆく.
逐次処理形式コーディング
の方法である。
今までの授業(情報処理2や3)で
行ってきたプログラミングの演習
bcc32やmake
手続き型
EVENT
プログラミングのスタイル
イベント駆動型(イベントドリブン)
処理はイベント毎に分割して記述され, 必要に応じて呼びだされ,
処理される方式
Windows上のアプリケーション(TeraPadやその他のソフト)
イベントドリブン
EVENT
イベント
外部からの入力アクション
•”キーボードが押された”
•”マウスが移動した” など
OSからのメッセージ など
アプリケーションに対するEvent(出来事)のこと
SDLではユーザーがアプリケーションに対して行う入力を
イベントとして扱 う
EVENT
SDLでイベントは
SDL_Event
という共用体(一種の構造体)を使って扱う
EVENT
アプリケーションに対する全てのイベントは、
イベントキューという過去にどんなイベントが発生したかを
記録する配列に収められる。
※先にイベントキューに入ったイベントから
アプリケーションに渡される。
マウスが動いた
マウス右
Aのキー
Aのキーが
押された
Cのキー
ESC
イベントキュー
SDLアプリケーション
EVENT
待ち行列の中のイベントの内容を取り出して処理する関数
int SDL_PollEvent (SDL_Event *event);
現在留まっているイベントを取り出し、
イベントがある時は 1 を、 ないときは 0 を返します。
event が NULL でない場合は、 次のイベントをキューから取
り出して、eventに格納します。
EVENT
SDL_Event
イベントを扱う型。
各種イベントに対応したメンバ変数をもつ共用体。
メンバ変数
type
イベントの型を扱う
キーが押されたイベント
SDL_KEYDOWN
マウスの移動イベント
SDL_MOUSEMOTION
マウスのボタンイベント
SDL_MOUSEBUTTONDOWN
EVENT
SDL_Event
イベントを扱う型。
各種イベントに対応したメンバ変数をもつ共用体。
メンバ変数
key.keysym.sym
どのキーが押されたかを扱う
SDLK_ESCAPE ESCキー
SDLK_RETURN リターンキー
など
EVENT
SDL_Event
イベントを扱う型。
各種イベントに対応したメンバ変数をもつ共用体。
メンバ変数
motion.x 、motion.y
マウスの位置がわかる
button.button
マウスのどのボタンが押されているか
など
EVENT
例
while(SDL_PollEvent(&e)){
//Eventをチェック
if (e.type == SDL_KEYDOWN ){ //もしキーイベントならチェックする
switch(e.key.keysym.sym){
case SDLK_ESCAPE: //もしESCキーが押されたなら終了
done=1;
break;
default:
break;
}
}
else if (e.type == SDL_MOUSEMOTION ){
//もしmouseの移動ならチェックする
Printf("マウスの位置 x,y = %d, %f\n",e.motion.x,e.motion.y);
}
//他の仕事
}