ページ 11

とても基礎すぎることですが....

Posted: 2016年8月19日(金) 00:25
by Ytemu
C++、もとりDXライブラリでif文を使い

もしも、Sキーが押されたらHelloと表示する、
そのあと、次の処理に進む

というプログラムを作りたいのですがSキーが押されたらHelloと表示は

コード:

if (CheckHitKey(KEY_INPUT_S) == 1) 
				DrawString(0, 40, "Hello", CR);
これにしましたが、これだとSが押されている間だけというのはわかります
根本的なところですがどうすれば一回押されたらそのあとも表示し続け、もう一度押されたら消すという
トグル式?のようにできますでしょうか?

または、そのようなものが乗っているサイトのURLでもかまいません
お願いします

Re: とても基礎すぎることですが....

Posted: 2016年8月19日(金) 01:13
by みけCAT
Ytemu さんが書きました:どうすれば一回押されたらそのあとも表示し続け、もう一度押されたら消すという
トグル式?のようにできますでしょうか?
表示するかどうかをフラグ(変数)で管理すればいいでしょう。

例えば、以下の擬似コードのようにするといいでしょう。

コード:

表示する = false
前のフレームにSキーが押されていた = false

メインループ {
    if (Sキーが押されている) {
        if (not 前のフレームにSキーが押されていた) {
            表示する = not 表示する
        }
        前のフレームにSキーが押されていた = true
    } else {
        前のフレームにSキーが押されていた = false
    }

    if (表示する) {
        Helloと表示する()
    }
}

Re: とても基礎すぎることですが....

Posted: 2016年8月22日(月) 22:49
by Dixq (管理人)
それを実現するには、DXライブラリの標準関数内だけでは無理で、ゲームプログラミングの館で紹介しているように、
キーの入力フレーム数を計算するモジュールが必要です。
館の方で計算しているので参考にしてください。
http://dixq.net/g/02_09.html

bool isShowing = false;
とでも宣言しておいて
if(Key[KEY_INPUT_Z]==1){
  isShowing = !isShowing;
}
とし、これをフラグに描画すればよいでしょう。