キーの二度押し(?)の質問

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

キーの二度押し(?)の質問

#1

投稿記事 by 西村 » 17年前

 ノベル風のゲームを作ろうとしているのですが、詰まったところがあったので質問させていただきます。
 とりあえず、『タイトル画面でEnterを押したらマップ画面に入り、そこで場所を選んでもう一度Enterを押し
たら選んだ場所の背景画面が表示される』という風にしようと思っているのですが、最初のタイトルでEnterを
押しただけでマップ画面を飛ばして背景画面に飛んでしまいます。以下がそのプログラムです。
if(a == 0){                                           
       DrawGraph(0,0,Title_Gr_Handle,FALSE);                //タイトル表示
        if(b == 0){                                         
            DrawGraph(310,275,Yajirusi_Gr_Handle,TRUE);   //ゲーム開始か終了を選ぶ矢印
            if(Key[KEY_INPUT_RETURN] == 1){
	       a = 1;                                      //マップ画面へ
	       b = 0;
	       }
	    }
        if(Key[KEY_INPUT_DOWN] == 1 || b != 0){
	    DrawGraph(310, 400,Yajirusi_Gr_Handle,TRUE);  //矢印表示
	    b = 1;
	    if(Key[KEY_INPUT_RETURN] == 1)
	       break;
	    else if(Key[KEY_INPUT_UP] == 1)
	         b = 0;
	    }
       }
       
      if(a == 1){
      DrawGraph(0,0,Map_Gr_Handle,FALSE);
       if(b == 0){
          DrawGraph(200, 50,Yajirusi_Gr_Handle,TRUE);
	    if(Key[KEY_INPUT_DOWN] == 1)
	       b = 1;
	    else if(Key[KEY_INPUT_LEFT] == 1)
	       b = 2;
	    else if(Key[KEY_INPUT_RIGHT] == 1)
	       b = 3;
	    else if(Key[KEY_INPUT_RETURN] == 1)
	       a = 2;	                           //背景画面へ
	  }

 と、こんな感じなのですが、原因は自分でもなんとなく解ります。タイトルでのEnterがマップ画面でも反映
されているんだろうなとは思うのですが、どう Key[KEY_INPUT_RETURN] を 0 に戻せばいいのかが解りません。
途中で Key[KEY_INPUT_RETURN] = 0 とすればいいのかなーなどと思っていたのですが、そうしたらマップ画面
Enterを押しても反応しなくなりました。どうしたらタイトル画面とマップ画面の間で Key[KEY_INPUT_RETURN]
を 0に戻せるのでしょうか?
 あと、プログラム自体へのアドバイスなども下されば嬉しいです。説明が下手で長い文章になってすみません。
 よろしくお願いします。

やそ

Re:キーの二度押し(?)の質問

#2

投稿記事 by やそ » 17年前

タイトル画面でエンターを押した場合はフラグ(a,b)をセットした後、マップ画面の表示を行うに留めて次のキー入力ループまで飛びましょう。
(continue?)

Mist

Re:キーの二度押し(?)の質問

#3

投稿記事 by Mist » 17年前

やそさんの回答にプラスしてキーの押し続けは無視するような処理を追加すればいいと思います。
if (Key[xx] == 1) {  // 押されている
    if (on_flg[xx] == 1) {
        // 押しっぱなしで無視
    } else {
        // ここでキーが押されたときの処理をする
    
        on_flg[xx] = 1;
    }
} else {             // 押されていない
    on_flg[xx] = 0;
}

西村

Re:キーの二度押し(?)の質問

#4

投稿記事 by 西村 » 17年前

 やそさん、Mistさん、回答ありがとうございます。
教えていただいた通り、continue を導入したところ無事解決しました。いままで一度も使用したことないcontinue だったので未だにその原理を理解し切れていないところもありますが、そこはこれから勉強しようと思います。
 Mistさんの教えて下さった処理はまだ導入していませんが、今後にも役に立ちそうな処理なのでこれからプラスしてみます。
 では、またよろしくお願いします。

管理人

Re:キーの二度押し(?)の質問

#5

投稿記事 by 管理人 » 17年前

キーをどれ位押したのかということは結構ゲームの中で大事になってくるので、
どれ位キーを押しているかチェックする関数も大事だと思います。
こちらにその関数が書いてありますのでよければ利用して下さい。

http://dixq.net/g/#40

やそ

Re:キーの二度押し(?)の質問

#6

投稿記事 by やそ » 17年前

continue文の説明
ttp://www9.plala.or.jp/sgwr-t/c/sec06-7.html

西村

Re:キーの二度押し(?)の質問

#7

投稿記事 by 西村 » 17年前

 管理人さん、やそさん、返答ありがとうございます。
 僕が持っている参考書では continue に関しては殆どスルーだったので、さっそく参考にさせていただきました。
 『ゲームプログラミングの館』では勉強させていただいているのですが……なるほど、そこが使えるのを完全に忘れていました。ご指摘ありがとうございます。

閉鎖

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