キーを軽く押したら連射みたいな機能になる。

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

キーを軽く押したら連射みたいな機能になる。

#1

投稿記事 by 狼肉 » 17年前

選択肢を作ってみました。
しかし、次のページに移動するボタンと、元のページに戻るボタンを同じボタンに設定してしまうと
進む→戻るが少しキーを押しただけで、何度か連続で入力されてしまうようになります。
これが原因で、選択肢を作っても、キーを軽く押しただけで3つ先の選択肢まで飛んだりしてしまいます。
解決策をお願いします。




ソース。
#include "DxLib.h"

int function_status=0,White;
char KeyBuf[ 256 ] ;

void A(){
        DrawString(100,100,"選択肢A",White);
        DrawString(300,100,"選択肢B",White);
		if(KeyBuf[KEY_INPUT_A]==1)
                function_status=1;
		else if (KeyBuf[KEY_INPUT_B]==1)
		function_status=2;
}

void B(){
        DrawString(100,100,"選択肢C",White);
        DrawString(300,100,"選択肢D",White);
        if(KeyBuf[KEY_INPUT_A]==1)
                function_status=0;
else if(KeyBuf[KEY_INPUT_B]==1)
                function_status=2;
}



int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
        ChangeWindowMode( TRUE ) ;                                   //ウィンドウモードに変更
        if( DxLib_Init() == -1 ) return -1;                      // DXライブラリ初期化処理 エラーが起きたら終了 
         
        White = GetColor( 255 , 255 , 255 ) ;                    //色の取得
          
        SetDrawScreen( DX_SCREEN_BACK ) ;                                // 描画先を裏画面に設定
           
        while( 1 ){
                ClearDrawScreen();                                                               // 裏画面のデータを全て削除
                GetHitKeyStateAll( KeyBuf ) ;                                    // すべてのキーの状態を得る

                switch(function_status){
                        case 0:
                                A();
                                break;
                        case 1:
                                B();
                                break;

                        default:
                                DxLib_End() ;                                // DXライブラリ使用の終了処理
                                return 0;
                                break;
                }

                if( ProcessMessage() == -1 ) break ;                 //エラーが起きたら終了
                
                ScreenFlip() ;                                   // 裏画面データを表画面へ反映
        }

        DxLib_End() ;                                            // DXライブラリ使用の終了処理
        return 0 ;                                               // ソフトの終了
}

木霊

Re:キーを軽く押したら連射みたいな機能になる。

#2

投稿記事 by 木霊 » 17年前

解決策
1:次のページに移動するボタンと元のページに戻るボタンを別のものにする

2:ページを移動した後、しばらく全ての入力を受け付けないようにする

3:ボタンの押しっ放しを無効にする


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

こちらの方も参考になりそうです

狼肉

Re:キーを軽く押したら連射みたいな機能になる。

#3

投稿記事 by 狼肉 » 17年前

試行錯誤した結果。

『WaitTimer』
という指定した秒間だけ処理を止める関数を選択肢の間間に打ち込んでいくとなりました。
ヒントありがとうございました。

閉鎖

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