ページ 11

説明の説明を希望

Posted: 2008年11月22日(土) 17:32
by うい
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されると終了


の、下の説明について、どうしてこうなるか教えててください。
また、ゲーム中キャラを動かす時には毎回必要な文字なのでしょうか?

Re:説明の説明を希望

Posted: 2008年11月22日(土) 18:04
by Mist
DXライブラリのリファレンスマニュアルでそれぞれの関数について調べられたほうがわかりやすいと思います。

http://homepage2.nifty.com/natupaji/DxLib/dxfunc.html

Re:説明の説明を希望

Posted: 2008年11月22日(土) 18:10
by バグ
ProcessMessage … Windowsプログラムに必要なメッセージ処理を行う
ClearDrawScreen … 画面のグラフィックを消去する
GetHitKeyStateAll … キーの入力状態の取得

だったかな?
で、それぞれの関数の戻り値が…
0が成功で、それ以外はなにかしらのエラーが発生した場合なので、

『!』演算子をつけて0が返ってきた場合に真としている…という訳です。
『&&』演算子を用いている箇所は、『●●であり、なおかつ▲▲である場合』という意味だと思ってください。

つまり、あの判定文は『ProcessMessage関数の実行に成功し、なおかつClearDrawScreen関数の実行に成功し、なおかつGetHitKeyStateAll関数の実行に成功し、エスケープキーが押されていない状態を真とする』という意味になります。

Re:説明の説明を希望

Posted: 2008年11月22日(土) 19:05
by うい
なるほど、!にはそういう意味があったのですね。
ありがとうございます。

Re:説明の説明を希望

Posted: 2008年11月23日(日) 01:38
by Dixq (管理人)
「!」の書き方がわかりにくかったですかね。

判定式は真か偽かで判定されますよね。

if(真){
    //
}

はいつも実行されますが

if(偽){
    //
}

はいつも実行されませんね。では「!(=否定)」をつけるとどうなるか

if(!真){
    //
}

はいつも実行されません。

if(!偽){
    //
}

はいつも実行されます。そして真とは0以外、偽とは0であることから、

if(!0){
    //
}

の時いつも実行させることが出来ます。関数の返り値は0以外が異常であることから、
この時条件から外すことが出来るのです。
 

Re:説明の説明を希望

Posted: 2008年11月25日(火) 17:26
by 紅葉
素人なりに
例えば
bool型のFlgがあったとします。


if(Flg == true){
//処理
}

if(Flg){
//処理
}

AとBは同じ意味です。
では!マークの場合はどうなのか・・・


if(Flg == false){
//処理
}

if(!Flg){
//処理
}
今度はCとDが同じ意味です。
説明が下手で申し訳ないのですがこんな感じです