ページ 11

while文の条件式の順番について

Posted: 2017年4月23日(日) 22:34
by 補給タンク
こんばんは。
現在ゲームプログラミングの館にて勉強中なのですが、
ここのページ(http://dixq.net/g/01_08.html)の部分でわからない部分があります。

というのも、ページ内のwhile文の中のプログラムを条件式の中にまとめて書き込む(短縮する)ところなのですが、
条件式の中身を以下のように書き込んだところ、画像が表示されず真っ黒のままになりました。

int x=0;
  int h; // データハンドル格納用変数
  h = LoadGraph( "画像/キャラクタ01.png" ); // 画像をロード

while( ProcessMessage()==0 && ClearDrawScreen()==0 && ScreenFlip()==0){

DrawGraph(x,100,h,TRUE); //画像描写(SetDrawScreenの設定で裏に描写)
x=x+2;
   }

ちなみにページの通りの順番 while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
とするとちゃんと画像が表示されるのですが、ここの理由がわかりません。
基本的なことで申し訳ないのですが、どなたか教えていただけないでしょうか?

Re: while文の条件式の順番について

Posted: 2017年4月23日(日) 22:47
by みけCAT
&&演算子は左辺を実行した後に(その結果が0でなければ)右辺を実行することが保証されており、
ClearDrawScreen()によって真っ黒になった画面をそのままScreenFlip()で表示しているのでそうなりますね。

Re: while文の条件式の順番について

Posted: 2017年4月23日(日) 23:05
by 補給タンク
みけCAT さんが書きました:&&演算子は左辺を実行した後に(その結果が0でなければ)右辺を実行することが保証されており、
ClearDrawScreen()によって真っ黒になった画面をそのままScreenFlip()で表示しているのでそうなりますね。
なるほど、ちゃんと条件式の中にも実行される順番というものがあったんですね。
つまり、ミスってた部分はClearDrawScreenを先に持ってきてしまっていたためだったんですね。
ここのアドバイスを元に少し章を遡ってまとめる前のプログラムを開き、
順番を入れ替えてみたら理解できました。
解説を頂けてとても助かりました。
ありがとうございます!