こんな時どうします・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
鈴虫

こんな時どうします・・・

#1

投稿記事 by 鈴虫 » 16年前

はじめまして、鈴虫です。
質問させてもらいます。

プログラミングの館にあった関数GetHitKeyStateAll_2を使います。
だいぶ大まかに書きますが・・・
int Key[256];
int count=0;

GetHitKeyStateAll_2(Key)==0;

if(Key[KEY_INPUT_RETURN] == 1 && count == 0){
  処理1
  count++;
}
if(Key[KEY_INPUT_RETURN] == 1 && count == 1){
  処理2
  count++;
}
if(Key[KEY_INPUT_RETURN] == 1 && count == 2){
  処理3
  count++;
}
というようなプログラムがあるとします。
この場合、エンターを1回押すと、処理3までいってしまいます。
でもエンターを押すごとに1つずつ処理を行わせたいわけです。
皆さんならどうしますか?

山崎

Re:こんな時どうします・・・

#2

投稿記事 by 山崎 » 16年前

おはようございます。

私もボタン押下の部分をこないだ作っていて、
こういった問題をどうしようか考えていました。

鈴虫さんが提示するようなコードならば、私はこのようにするかと思います。
if(Key[KEY_INPUT_RETURN] == 1)
{
    switch(count)
    {
        case 1:
            処理1;
            break;
        case 2:
            処理2;
            break;
        case 3:
            ...
     }
     count++;
}
実際ゲームを作るとしたらコードはもうちょっと複雑になると思うので
その時もこの「if文の中にswitch文」の方式にするかどうかはちょっとわかりませんが、
提示されたコードを書き換えるならこういう感じで差し支えないのでは、と考えます。

実際の場合ですと、おそらくcountの値による分岐の条件が
もうちょっと複雑になるのでしょうなぁ。

sizuma

Re:こんな時どうします・・・

#3

投稿記事 by sizuma » 16年前

処理の最後に前回のkeyの状態を保存しておいて、前回のkeyがリリースだったら処理をする
てするかな
簡略化しないでこれだけの処理だったら、2個目のifをelse ifに変えればいいと思いますけど

DXライブラリ使ったことないんで、KEY_REREASE_RETURNみたいにdefineされてるのかはわからないんですが;
・・・ヘッダ覗いてみたらinputしか定義してなかったですね。
&& !pre_key[KEY_INPUT_RETURN]
ですかね

Dixq (管理人)

Re:こんな時どうします・・・

#4

投稿記事 by Dixq (管理人) » 16年前

最初の
GetHitKeyStateAll_2(Key)==0;
は何を意味しているのでしょう?

後、このようなif文はelseでつなげるといいですよ。

if(){
}
else if(){
}
else if(){
}

とすれば全部の条件を通ってしまう事が防げます。

sizuma

Re:こんな時どうします・・・

#5

投稿記事 by sizuma » 16年前

おっと失礼・・・
僕の
>2個目のifをelse ifに

2個目からのifをelse ifでした

素人目からですが。
Enterを押したときだけの処理を記述するなら
CheckHitKeyを使った方がいいのではないかと思いますが

鈴虫

Re:こんな時どうします・・・

#6

投稿記事 by 鈴虫 » 16年前

else if()を使ってやってみたところ、うまくいきました。
アドバイスをくれた皆さん、本当にありがとうございました。

>>GetHitKeyStateAll_2(Key)==0;
>>は何を意味しているのでしょう?

ゲームループ毎に必ず呼び出す関数なので、ループ毎に必ず通るところという意味で、そこで状態を保存しています。
最初に書いたプログラムは関数の一部分で、それが何回か呼び出されています。
説明不足ですみません。

閉鎖

“C言語何でも質問掲示板” へ戻る