Re: キーおしっぱなしによる連続入力を防ぎたい ( No.1 ) |
- 名前:たろう 日時:2023/09/14 18:18
初心者ですさんこんにちは、
そのまま動くように書いてみましたが、
つまり一瞬だけ1が表示されるようにしたいという事でしょうか?
「目的通りキーを離さないと次の入力ができないように」ともあるので・・・
#include "DxLib.h"
struct MyStruct {
int Up,
Down,
Left,
Right,
A,
B,
X,
Y,
Start,
Select;
};
MyStruct Key;
int flag_key[10]={0};
void default_key(){
Key.Up = KEY_INPUT_UP,
Key.Down = KEY_INPUT_DOWN,
Key.Left = KEY_INPUT_LEFT,
Key.Right = KEY_INPUT_RIGHT,
Key.A = KEY_INPUT_Z,
Key.B = KEY_INPUT_X,
Key.X = KEY_INPUT_A,
Key.Y = KEY_INPUT_S,
Key.Start = KEY_INPUT_RETURN,
Key.Select = KEY_INPUT_SPACE;
}
void draw()
{
if (flag_key[0] == 0) {//おしっぱなしによる連続入力を防ぐ
if (CheckHitKey(Key.A) == 1) flag_key[0]++;
if (CheckHitKey(Key.Start) == 1)flag_key[0]++;
if (CheckHitKey(Key.B) == 1)flag_key[0]++;
}
else {
if (CheckHitKey(Key.A) != 1 && CheckHitKey(Key.Start) != 1 && CheckHitKey(Key.B) != 1)flag_key[0] = 0;
}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
default_key();
ChangeWindowMode( TRUE ) ; DxLib_Init(); SetDrawScreen( DX_SCREEN_BACK ) ;
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
draw();
DrawFormatString( 0,0, GetColor(255,255,255),"(%d)",flag_key[0] ) ;
ScreenFlip() ;
}
DxLib_End() ;
return -1 ;
}
 |
Re: キーおしっぱなしによる連続入力を防ぎたい ( No.2 ) |
- 名前:初心者です(解決済み) 日時:2023/09/15 14:32
たろうさん。ご回答ありがとうございます。
そうですね、1と表示されている間はキーボードを押しても反応しないようにさせたいです。
ファイルをひとつにまとめると正しく動くのでしょうか。そしたらどうしてファイルをわけたままでも右左の関数は動いているのでしょうか
キーの関数->config.cpp
連続入力を防ぐ関数->start.cpp
WINAPI WinMain->main.cpp
に記述しています。
語彙力がなくてうまく説明できず、皆様に迷惑がかかってしまうのであきらめることにしました。
わざわざ質問を立てておいて自分勝手ですみません。
たろうさん、こんな自分にお付き合いいただきありがとうございました。
|
Re: キーおしっぱなしによる連続入力を防ぎたい ( No.3 ) |
- 名前:たろう(解決) 日時:2023/09/15 16:41
初心者さん、お気遣いありがとうございます。
「1と表示されている間はキーボードを押しても反応しないように」
ということは結果的に1が一瞬だけ表示されるようにするのと同じなので
例えば下の様に変数(flag[10])を一つ挟めばよいと思います。
「ファイルをひとつにまとめると正しく動くのでしょうか」
との事ですが、そうではなくて単純にdraw()に問題があるので、
うまく動かないだけと思いますm(__)m
#include "DxLib.h"
struct MyStruct {
int Up,
Down,
Left,
Right,
A,
B,
X,
Y,
Start,
Select;
};
MyStruct Key;
int flag_key[2]={0};
void default_key(){
Key.Up = KEY_INPUT_UP,
Key.Down = KEY_INPUT_DOWN,
Key.Left = KEY_INPUT_LEFT,
Key.Right = KEY_INPUT_RIGHT,
Key.A = KEY_INPUT_Z,
Key.B = KEY_INPUT_X,
Key.X = KEY_INPUT_A,
Key.Y = KEY_INPUT_S,
Key.Start = KEY_INPUT_RETURN,
Key.Select = KEY_INPUT_SPACE;
}
void draw()
{
flag_key[0]=0;
static int flag[10]={0};
if(CheckHitKey(Key.A) == 1){flag[0]++;}else{flag[0]=0;}
if(CheckHitKey(Key.B) == 1){flag[1]++;}else{flag[1]=0;}
if(flag[0]==1){flag_key[0]++;}
if(flag[1]==1){flag_key[0]++;}
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
default_key();
ChangeWindowMode( TRUE ) ; DxLib_Init(); SetDrawScreen( DX_SCREEN_BACK ) ;
while( ProcessMessage() == 0 )
{
ClearDrawScreen() ;
draw();
DrawFormatString( 0,0, GetColor(255,255,255),"(%d)",flag_key[0] ) ;
ScreenFlip() ;
}
DxLib_End() ;
return -1 ;
}
 |
Re: キーおしっぱなしによる連続入力を防ぎたい ( No.4 ) |
- 名前:初心者です(解決済み) 日時:2023/09/15 23:37
たろうさん、
私側から突き離しておきながらもお付き合いいただき誠にありがとうございます。
たろうさんの助言を参考に手を加えたところ、目的通りの挙動になりました。
おかげさまでモチベーションが回復しております。
本件は本当にありがとうございました。また機会がありましたらぜひよろしくお願いいたします。
|
|