ダッシュのアルゴリズムについて

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

ダッシュのアルゴリズムについて

#1

投稿記事 by あきら » 13年前

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

#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;
}

よろしくお願いします

アバター
海Sea
記事: 102
登録日時: 13年前
住所: 大阪
連絡を取る:

Re: ダッシュのアルゴリズムについて

#2

投稿記事 by 海Sea » 13年前

こんにちは。
ダッシュのコードの部分についてということで、
dxlibの仕様をちゃんとわかっているわけではないのですが、
この場合の基本的な考え方は、

1度目のキー入力→変数に1度目の数を代入→2度目のキー入力までの時間を測る
→定められた指定時間内で2度目のキー入力がされるかどうかを確認→OKならば2回目の数を代入→キーを入力し続けていればダッシュ実行

という、指定時間内で二回押されたかどうかの動きを知る事です。
おそらくコードの中のC++という部分でフレーム内の時間を計っていると思われるので、
二回キー入力されたということを知る術をコーディングすれば上手くいくと思います。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: ダッシュのアルゴリズムについて

#3

投稿記事 by h2so5 » 13年前

変数を用意して、キーが押された瞬間のみ変数の数値を5にします。
キーが押されていない、または押し続けられている(Key[KEY_INPUT_RIGHT]!=1)場合は、
フレームごとに変数をひとつずつ減算します。(最小値0)

キーが押された瞬間に変数が1以上であれば、
前のキー入力から5フレーム以内に連続して押したことが分かります。

あきら

Re: ダッシュのアルゴリズムについて

#4

投稿記事 by あきら » 13年前

お二方、分かりやすい説明ありがとうございます。
理屈は分かったのであとはこれを使えるようにしようと思います。

ありがとうございました!!

閉鎖

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