初めまして、あきらと申します。
格闘ゲームを作ろうと頑張っているのですが、ダッシュのアルゴリズムで苦戦しています。
ここで言うダッシュというのは→または←キーを素早く二度押ししたときのみ実行するようにしたいです。できれば二度目のときは押し続けた場合にダッシュし続ける という仕様にしたいです。以下のように自分でやってみたのですが・・・一度→を押しただけでダッシュ状態になります。
どなたかよろしければアルゴリズムを教えてください・・・
#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フレーム以内に連続して押したことが分かります。