初めまして、あきらと申します。
格闘ゲームを作ろうと頑張っているのですが、ダッシュのアルゴリズムで苦戦しています。
ここで言うダッシュというのは→または←キーを素早く二度押ししたときのみ実行するようにしたいです。できれば二度目のときは押し続けた場合にダッシュし続ける という仕様にしたいです。以下のように自分でやってみたのですが・・・一度→を押しただけでダッシュ状態になります。
どなたかよろしければアルゴリズムを教えてください・・・
#include "DxLib.h"
 
int Key[256];
 
int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[]){
    char GetHitKeyStateAll_Key[256];
    GetHitKeyStateAll( GetHitKeyStateAll_Key );
    for(int i=0;i<256;i++){
        if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++;
        else                            GetHitKeyStateAll_InputKey=0;
    }
    return 0;
}
int image[20],a=0,d_f=0,d_f2=0,c=0,c2=0,hito,muki=1,x=100;
 
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
 
	LoadDivGraph("hito2.bmp",20,4,5,200,200,image);
    while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){
          //↑メッセージ処理          ↑画面をクリア           ↑入力状態を保存       ↑ESCが押されていない
 
		if(Key[ KEY_INPUT_RIGHT   ]  >= 1 ){
			if(d_f==0){
				x+=2;
				d_f=1;
				muki=1;
			}
			if(d_f2=1){		//ダッシュフラグ2が1のとき、ダッシュを実行
				x+=4;
				muki=3;
			}
		}else if(Key[KEY_INPUT_LEFT]>=1){
			x-=2;
			muki=1;
		}else
			muki=0;
		if(0<c&&c<=10&&Key[KEY_INPUT_RIGHT]==1)
			d_f2=1;
		if(d_f==1)
			c++;
		if(c>10&&Key[KEY_INPUT_RIGHT]==0){			//リセット?
			c=0;
			d_f=0;
			d_f2=0;
		}
		if(x>500)
			x=0;
		
		hito=image[muki*4+a/7%4];
		DrawBox(0,0,640,480,GetColor(255,255,255),TRUE);//画面全体を白い四角で表示
        DrawGraph(x,240,hito,TRUE);
		a++;
 
 
 
        ScreenFlip();
    }
 
    DxLib_End();
    return 0;
}
よろしくお願いします
			
									
									
						ダッシュのアルゴリズムについて
Re: ダッシュのアルゴリズムについて
こんにちは。
ダッシュのコードの部分についてということで、
dxlibの仕様をちゃんとわかっているわけではないのですが、
この場合の基本的な考え方は、
1度目のキー入力→変数に1度目の数を代入→2度目のキー入力までの時間を測る
→定められた指定時間内で2度目のキー入力がされるかどうかを確認→OKならば2回目の数を代入→キーを入力し続けていればダッシュ実行
という、指定時間内で二回押されたかどうかの動きを知る事です。
おそらくコードの中のC++という部分でフレーム内の時間を計っていると思われるので、
二回キー入力されたということを知る術をコーディングすれば上手くいくと思います。
			
									
									
						ダッシュのコードの部分についてということで、
dxlibの仕様をちゃんとわかっているわけではないのですが、
この場合の基本的な考え方は、
1度目のキー入力→変数に1度目の数を代入→2度目のキー入力までの時間を測る
→定められた指定時間内で2度目のキー入力がされるかどうかを確認→OKならば2回目の数を代入→キーを入力し続けていればダッシュ実行
という、指定時間内で二回押されたかどうかの動きを知る事です。
おそらくコードの中のC++という部分でフレーム内の時間を計っていると思われるので、
二回キー入力されたということを知る術をコーディングすれば上手くいくと思います。
Re: ダッシュのアルゴリズムについて
変数を用意して、キーが押された瞬間のみ変数の数値を5にします。
キーが押されていない、または押し続けられている(Key[KEY_INPUT_RIGHT]!=1)場合は、
フレームごとに変数をひとつずつ減算します。(最小値0)
キーが押された瞬間に変数が1以上であれば、
前のキー入力から5フレーム以内に連続して押したことが分かります。
			
									
									
						キーが押されていない、または押し続けられている(Key[KEY_INPUT_RIGHT]!=1)場合は、
フレームごとに変数をひとつずつ減算します。(最小値0)
キーが押された瞬間に変数が1以上であれば、
前のキー入力から5フレーム以内に連続して押したことが分かります。