Win32単体におけるゲーム製作の考察
こんにちは、 わ た し で す。
いままで、DXライブラリを使ってのゲーム開発はしたことがあるが、Win32だけでの開発はしたことがない。
DXライブラリはつくりがわかりやすく毎回ProcessMessageを実行するループに処理をすべて突っ込めばよかったが、Win32だとどうなるのだろうか。
個人的な意見は、WM_TIMER(タイマーが指定時になるたびにくるメッセージ)にはさめば擬似的ではあるが、フレームレートを制御できるのではないかと考えた。しかし、プログラムを見返してみると
という構文がある。
while(( bRet = GetMessage( &msg、NULL,0,0 )) != -1 ){
if( bRet == 0 ) break;
else{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
メッセージキューからメッセージを取得して、メッセージの翻訳等を行う部分だが、この部分の
while(( bRet = GetMessage( &msg、NULL,0,0 )) != -1 ){
if( bRet == 0 ) break;
else{
TranslateMessage( &msg );
DispatchMessage( &msg );
//ここ
}
}
にゲームの処理をはさむとどうなるのだろうか。
というか、CALLBACK関数はいったいどのタイミングでじっこうされているのだろうか?
なので、しらべてみた。
ブレークポイントをはさんだところ、DispatchMessage( &msg )におこなわれるのかとおもっていたら、DispatchMesssageが実行されない場合も。挙動がわからない…
やっぱり、タイマー使ってWM_TIMER時に全処理はさんだほうがいいかな…
と思ってたら猫Cさんのところでゲーム作る章があったと思って、いってみた。→リンク
この例は五目並べゲームだけど…
この場合はマウスのボタン系メッセージに挟んでありますね…この場合は毎回書き直しというのがないので、それでもいいかも知れませんが、ブロック崩しのように状況が刻々とかわっていくようなゲームはどうなのでしょうか?
なのでまた調べてみた。→リンク
…
マルチスレッドのの存在忘れてたぁぁぁぁぁ!!!
マルチスレッド使ってウィンドウの処理とは別でうらでうごかすのか…
だからDXライブラリはProcessMessageのループで擬似的にマルチスレッドを再現してるのかな…ワカラン。
ただこれでおおまかな処理の流れはわかった(気がする)。
とりあえずマルチスレッドの勉強せにゃあかんな…
なんかきくからにスレッドの存在を理解するのが難しいとか難しくないとか。
とりあえずやってみないとわからない…(震え
それでは今回はこのあたりで。
スレッドの勉強がおわったらなんかブロック崩しとか簡単な横スクロールでも作ってみるとします(可能なら公開(糞ゲー安定