ページ 1 / 1
こんな時どうします・・・
Posted: 2009年6月28日(日) 04:10
by 鈴虫
はじめまして、鈴虫です。
質問させてもらいます。
プログラミングの館にあった関数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:こんな時どうします・・・
Posted: 2009年6月28日(日) 08:38
by 山崎
おはようございます。
私もボタン押下の部分をこないだ作っていて、
こういった問題をどうしようか考えていました。
鈴虫さんが提示するようなコードならば、私はこのようにするかと思います。
if(Key[KEY_INPUT_RETURN] == 1)
{
switch(count)
{
case 1:
処理1;
break;
case 2:
処理2;
break;
case 3:
...
}
count++;
}
実際ゲームを作るとしたらコードはもうちょっと複雑になると思うので
その時もこの「if文の中にswitch文」の方式にするかどうかはちょっとわかりませんが、
提示されたコードを書き換えるならこういう感じで差し支えないのでは、と考えます。
実際の場合ですと、おそらくcountの値による分岐の条件が
もうちょっと複雑になるのでしょうなぁ。
Re:こんな時どうします・・・
Posted: 2009年6月28日(日) 09:14
by sizuma
処理の最後に前回のkeyの状態を保存しておいて、前回のkeyがリリースだったら処理をする
てするかな
簡略化しないでこれだけの処理だったら、2個目のifをelse ifに変えればいいと思いますけど
DXライブラリ使ったことないんで、KEY_REREASE_RETURNみたいにdefineされてるのかはわからないんですが;
・・・ヘッダ覗いてみたらinputしか定義してなかったですね。
&& !pre_key[KEY_INPUT_RETURN]
ですかね
Re:こんな時どうします・・・
Posted: 2009年6月28日(日) 10:43
by Dixq (管理人)
最初の
GetHitKeyStateAll_2(Key)==0;
は何を意味しているのでしょう?
後、このようなif文はelseでつなげるといいですよ。
if(){
}
else if(){
}
else if(){
}
とすれば全部の条件を通ってしまう事が防げます。
Re:こんな時どうします・・・
Posted: 2009年6月28日(日) 13:25
by sizuma
おっと失礼・・・
僕の
>2個目のifをelse ifに
は
2個目からのifをelse ifでした
素人目からですが。
Enterを押したときだけの処理を記述するなら
CheckHitKeyを使った方がいいのではないかと思いますが
Re:こんな時どうします・・・
Posted: 2009年6月28日(日) 16:26
by 鈴虫
else if()を使ってやってみたところ、うまくいきました。
アドバイスをくれた皆さん、本当にありがとうございました。
>>GetHitKeyStateAll_2(Key)==0;
>>は何を意味しているのでしょう?
ゲームループ毎に必ず呼び出す関数なので、ループ毎に必ず通るところという意味で、そこで状態を保存しています。
最初に書いたプログラムは関数の一部分で、それが何回か呼び出されています。
説明不足ですみません。