コマンド入力について質問です。
自分はDXライブラリを使って格闘ゲームを作ろうとしています。
サンプルプログラムにズバリそのものの項目があったのでそれを多少改変して組もうとしていたのですが
そのサンプルプログラム内では「カーソルキー入力のみを記憶しZが押されたときに事前に宣言した配列と一致しているか確認する」
という組まれ方になっています。
1ボタン式ならこれでいいのですが、5つほどボタンを作りたいので困っています。
これを解消するのに
・カーソルキー以外も記憶する
・各ボタンごとに配列を用意する
のどちらがいいのでしょうか?
出来ればカーソルキー以外も記憶するほうが宣言する数が少なくて済むので楽なのですが、わざわざそうしていないということはそれでは何か問題が発生するのでしょうか?
格闘ゲームのコマンド入力
Re:格闘ゲームのコマンド入力
失礼しました。
18.格闘ゲームコマンド入力基本
// 格ゲーコマンド入力基本
#include "DxLib.h"
#define INPUT_MAX_BUF 256 // 入力データの最大記憶数
#define INPUT_VALID_TIME 100 // 入力データが無効になるまでの時間
#define INPUT_DOUJI_TIME 10 // 同時押しの範囲となる時間
#define SKILL_DRAWTIME 1000 // 技名を表示している時間
// メインデータ
int NowTime ; // 現在の時間
int DrawTime ; // 技名ののこり表示時間
char DrawSkillName[ 128 ] ; // 表示する技名
int OldInputData ; // ひとつ前のキー入力データ
int InputBuf[ INPUT_MAX_BUF ] ; // 入力データのログ
int InputTime ; // 入力が行われた時間
int InputNum ; // 入力されたコマンドの数
// 技名データ
char *SkillName[/url] =
{
"波動拳",
"昇竜拳",
"昇竜拳",
} ;
// 技データ
int SkillCommand[ 256 ][ 256 ] =
{
// 波動拳
{ PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_RIGHT , -1 } ,
// 昇竜拳
{ PAD_INPUT_RIGHT , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , -1 } ,
{ PAD_INPUT_RIGHT , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , -1 } ,
// 技データ終端用-1
{ -1 } ,
} ;
void CommandInput( void ) ; // キー入力処理を行う
void InitInputData( void ) ; // インプットデータを初期化する
int SkillCheck( void ) ; // 入力したコマンドに対応した技を検索する
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int OldTime ; // 前フレーム時の時間
SetGraphMode( 640 , 480 , 16 ) ; // 画面設定
if ( DxLib_Init() == -1 ) return -1; // ライブラリ初期化
// 描画先を裏画面に設定
SetDrawScreen( DX_SCREEN_BACK ) ;
// 時間の取得
NowTime = GetNowCount() ;
// メインループ
while( ProcessMessage() == 0 && ( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_START ) == 0 )
{
// コマンド入力処理の実行
CommandInput() ;
// 画面を初期化
ClearDrawScreen() ;
// 技名の表示
if( DrawTime > 0 )
{
DrawString( 200 , 200 , DrawSkillName , 0xffffff ) ;
// 残り表示時間を減らす
DrawTime -= NowTime - OldTime ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
OldTime = NowTime ; // 前フレームの時間を保存
NowTime = GetNowCount() ; // 現在の時間を取得
}
// ライブラリの終了
DxLib_End() ;
return 0;
}
// キー入力処理を行う
void CommandInput( void )
{
int InputData , OldCursorData , CursorData ;
// 現在の入力状態を取得
InputData = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// カーソルキー入力のみのデータにする
CursorData = InputData ;
CursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
// 前回のキー入力からカーソルキー入力のみを抽出
OldCursorData = OldInputData ;
OldCursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
// 前フレームとキー入力に違いがあり、更にカーソルキーを押していた場合のみ記録する
if( CursorData != OldCursorData && CursorData != 0 )
{
// もし以前とのキー入力時間との差が同時押し判定時間内だった場合は以前のキー入力データに加算する
if( ( InputNum != 0 ) && ( NowTime - InputTime < INPUT_DOUJI_TIME ) )
{
InputBuf[ InputNum - 1 ] |= CursorData ;
}
else
{
// バッファにキー入力状態を保存する
InputBuf[ InputNum ] = CursorData ;
// 入力時間を残す
InputTime = NowTime ;
// 入力コマンドの数を増やす
InputNum ++ ;
}
}
// 何もしていない時間が規定以上経過していたら入力データをクリアする
if( InputTime != 0 && NowTime - InputTime > INPUT_VALID_TIME )
{
InitInputData() ;
}
// もしZボタンが押されていたら対応した技を検索する
if( ( ( InputData & ~CursorData & ~OldInputData ) & PAD_INPUT_A ) != 0 )
{
int SkillNum ;
// 対応している技を取得
SkillNum = SkillCheck() ;
// もし何の技も出していなければなにもしない
if( SkillNum != -1 )
{
// 技の名前をセット
strcpy( DrawSkillName , SkillName[ SkillNum ] ) ;
// 表示時間をセット
DrawTime = SKILL_DRAWTIME ;
}
// 入力データを初期化
InitInputData() ;
}
// 今フレームのキー入力状態を保存
OldInputData = InputData ;
}
// インプットデータを初期化する
void InitInputData( void )
{
int i ;
// キー入力データをクリア
for( i = 0 ; i < InputNum ; i ++ )
{
InputBuf[ i ] = 0 ;
}
// 入力時間もクリア
InputTime = 0 ;
// 入力されたコマンドの数を初期化
InputNum = 0 ;
}
// 入力したコマンドに対応した技を検索する
int SkillCheck( void )
{
int Skill , MaxConbo , i , j ;
// 出す技を探す
MaxConbo = 0 ;
for( i = 0 ; SkillCommand[ i ][ 0 ] != -1 ; i ++ )
{
// コマンドデータと入力したデータが等しい数を調べる
j = 0 ;
while( SkillCommand[ i ][ j ] == InputBuf[ j ] ) j ++ ;
// コマンドデータの終端まで同じだった場合は
// その技のコマンド数と技ナンバーを保存する
// なお以前にもっと多くのコマンドを要す技と適合していたら記憶しない
if( SkillCommand[ i ][ j ] == -1 && MaxConbo < j )
{
MaxConbo = j ;
Skill = i ;
}
}
// 合った技が無ければ-1を返す
if( MaxConbo == 0 ) return -1 ;
// 選ばれた技ナンバーを返す
return Skill ;
}
18.格闘ゲームコマンド入力基本
// 格ゲーコマンド入力基本
#include "DxLib.h"
#define INPUT_MAX_BUF 256 // 入力データの最大記憶数
#define INPUT_VALID_TIME 100 // 入力データが無効になるまでの時間
#define INPUT_DOUJI_TIME 10 // 同時押しの範囲となる時間
#define SKILL_DRAWTIME 1000 // 技名を表示している時間
// メインデータ
int NowTime ; // 現在の時間
int DrawTime ; // 技名ののこり表示時間
char DrawSkillName[ 128 ] ; // 表示する技名
int OldInputData ; // ひとつ前のキー入力データ
int InputBuf[ INPUT_MAX_BUF ] ; // 入力データのログ
int InputTime ; // 入力が行われた時間
int InputNum ; // 入力されたコマンドの数
// 技名データ
char *SkillName[/url] =
{
"波動拳",
"昇竜拳",
"昇竜拳",
} ;
// 技データ
int SkillCommand[ 256 ][ 256 ] =
{
// 波動拳
{ PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_RIGHT , -1 } ,
// 昇竜拳
{ PAD_INPUT_RIGHT , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , -1 } ,
{ PAD_INPUT_RIGHT , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , -1 } ,
// 技データ終端用-1
{ -1 } ,
} ;
void CommandInput( void ) ; // キー入力処理を行う
void InitInputData( void ) ; // インプットデータを初期化する
int SkillCheck( void ) ; // 入力したコマンドに対応した技を検索する
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int OldTime ; // 前フレーム時の時間
SetGraphMode( 640 , 480 , 16 ) ; // 画面設定
if ( DxLib_Init() == -1 ) return -1; // ライブラリ初期化
// 描画先を裏画面に設定
SetDrawScreen( DX_SCREEN_BACK ) ;
// 時間の取得
NowTime = GetNowCount() ;
// メインループ
while( ProcessMessage() == 0 && ( GetJoypadInputState( DX_INPUT_KEY_PAD1 ) & PAD_INPUT_START ) == 0 )
{
// コマンド入力処理の実行
CommandInput() ;
// 画面を初期化
ClearDrawScreen() ;
// 技名の表示
if( DrawTime > 0 )
{
DrawString( 200 , 200 , DrawSkillName , 0xffffff ) ;
// 残り表示時間を減らす
DrawTime -= NowTime - OldTime ;
}
// 裏画面の内容を表画面に反映させる
ScreenFlip() ;
OldTime = NowTime ; // 前フレームの時間を保存
NowTime = GetNowCount() ; // 現在の時間を取得
}
// ライブラリの終了
DxLib_End() ;
return 0;
}
// キー入力処理を行う
void CommandInput( void )
{
int InputData , OldCursorData , CursorData ;
// 現在の入力状態を取得
InputData = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// カーソルキー入力のみのデータにする
CursorData = InputData ;
CursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
// 前回のキー入力からカーソルキー入力のみを抽出
OldCursorData = OldInputData ;
OldCursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
// 前フレームとキー入力に違いがあり、更にカーソルキーを押していた場合のみ記録する
if( CursorData != OldCursorData && CursorData != 0 )
{
// もし以前とのキー入力時間との差が同時押し判定時間内だった場合は以前のキー入力データに加算する
if( ( InputNum != 0 ) && ( NowTime - InputTime < INPUT_DOUJI_TIME ) )
{
InputBuf[ InputNum - 1 ] |= CursorData ;
}
else
{
// バッファにキー入力状態を保存する
InputBuf[ InputNum ] = CursorData ;
// 入力時間を残す
InputTime = NowTime ;
// 入力コマンドの数を増やす
InputNum ++ ;
}
}
// 何もしていない時間が規定以上経過していたら入力データをクリアする
if( InputTime != 0 && NowTime - InputTime > INPUT_VALID_TIME )
{
InitInputData() ;
}
// もしZボタンが押されていたら対応した技を検索する
if( ( ( InputData & ~CursorData & ~OldInputData ) & PAD_INPUT_A ) != 0 )
{
int SkillNum ;
// 対応している技を取得
SkillNum = SkillCheck() ;
// もし何の技も出していなければなにもしない
if( SkillNum != -1 )
{
// 技の名前をセット
strcpy( DrawSkillName , SkillName[ SkillNum ] ) ;
// 表示時間をセット
DrawTime = SKILL_DRAWTIME ;
}
// 入力データを初期化
InitInputData() ;
}
// 今フレームのキー入力状態を保存
OldInputData = InputData ;
}
// インプットデータを初期化する
void InitInputData( void )
{
int i ;
// キー入力データをクリア
for( i = 0 ; i < InputNum ; i ++ )
{
InputBuf[ i ] = 0 ;
}
// 入力時間もクリア
InputTime = 0 ;
// 入力されたコマンドの数を初期化
InputNum = 0 ;
}
// 入力したコマンドに対応した技を検索する
int SkillCheck( void )
{
int Skill , MaxConbo , i , j ;
// 出す技を探す
MaxConbo = 0 ;
for( i = 0 ; SkillCommand[ i ][ 0 ] != -1 ; i ++ )
{
// コマンドデータと入力したデータが等しい数を調べる
j = 0 ;
while( SkillCommand[ i ][ j ] == InputBuf[ j ] ) j ++ ;
// コマンドデータの終端まで同じだった場合は
// その技のコマンド数と技ナンバーを保存する
// なお以前にもっと多くのコマンドを要す技と適合していたら記憶しない
if( SkillCommand[ i ][ j ] == -1 && MaxConbo < j )
{
MaxConbo = j ;
Skill = i ;
}
}
// 合った技が無ければ-1を返す
if( MaxConbo == 0 ) return -1 ;
// 選ばれた技ナンバーを返す
return Skill ;
}
Re:格闘ゲームのコマンド入力
念のため、サンプルというのは↓これですね。
http://homepage2.nifty.com/natupaji/DxL ... m.html#N18
> ・カーソルキー以外も記憶する
> ・各ボタンごとに配列を用意する
> のどちらがいいのでしょうか?
> 出来ればカーソルキー以外も記憶するほうが宣言する数が少なくて済むので楽なのですが、
> わざわざそうしていないということはそれでは何か問題が発生するのでしょうか?
「カーソルキー以外も記憶する」がいいと思います。
「わざわざそうしていない」というか、単にサンプルだからそこまで作ってないということだと思います。
http://homepage2.nifty.com/natupaji/DxL ... m.html#N18
> ・カーソルキー以外も記憶する
> ・各ボタンごとに配列を用意する
> のどちらがいいのでしょうか?
> 出来ればカーソルキー以外も記憶するほうが宣言する数が少なくて済むので楽なのですが、
> わざわざそうしていないということはそれでは何か問題が発生するのでしょうか?
「カーソルキー以外も記憶する」がいいと思います。
「わざわざそうしていない」というか、単にサンプルだからそこまで作ってないということだと思います。
Re:格闘ゲームのコマンド入力
>念のため、サンプルというのは↓これですね。
>http://homepage2.nifty.com/natupaji/DxL ... m.html#N18
そのとおりです。最初からURL書いとけばよかった…
>「わざわざそうしていない」というか、単にサンプルだからそこまで作ってないということだと思います。
// カーソルキー入力のみのデータにする
CursorData = InputData ;
CursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
// 前回のキー入力からカーソルキー入力のみを抽出
OldCursorData = OldInputData ;
OldCursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
ここでカーソル以外を省いてるような気がするのですが、違うのでしょうか…
>http://homepage2.nifty.com/natupaji/DxL ... m.html#N18
そのとおりです。最初からURL書いとけばよかった…
>「わざわざそうしていない」というか、単にサンプルだからそこまで作ってないということだと思います。
// カーソルキー入力のみのデータにする
CursorData = InputData ;
CursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
// 前回のキー入力からカーソルキー入力のみを抽出
OldCursorData = OldInputData ;
OldCursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN ;
ここでカーソル以外を省いてるような気がするのですが、違うのでしょうか…
Re:格闘ゲームのコマンド入力
そうです。カーソル以外を省くことで、簡単にしているわけです。
「サンプルだから、とりあえず十字キーのサンプルだけでいいや」ということだと思います。
もちろん、ご本人に聞くのが一番でしょうけども...
例えば「↓→A」のコマンドがあるとして、
サンプルだと「↓B→A」とか、うっかり別のキーがまざっちゃっても、Bは無視されますね。
これをヨシとするかどうかです。
Day-Dさんが作ろうとしているゲームが「それでもいい」ならいいし、
「いや十字キーだけでなく、他のボタンもまぜたコマンドを作りたい」ということなら、
上下左右だけでなく、全キーを格納するのがよいと思います。
「サンプルだから、とりあえず十字キーのサンプルだけでいいや」ということだと思います。
もちろん、ご本人に聞くのが一番でしょうけども...
例えば「↓→A」のコマンドがあるとして、
サンプルだと「↓B→A」とか、うっかり別のキーがまざっちゃっても、Bは無視されますね。
これをヨシとするかどうかです。
Day-Dさんが作ろうとしているゲームが「それでもいい」ならいいし、
「いや十字キーだけでなく、他のボタンもまぜたコマンドを作りたい」ということなら、
上下左右だけでなく、全キーを格納するのがよいと思います。
Re:格闘ゲームのコマンド入力
亀レスでスイマセン。
なんどか試してみたのですがうまくいかず、別のものが悪さしてるのかとサンプル改変でもうまくいきませんでした。
ビット演算子殆ど勉強しなかったのがいけなかったのでしょうか…
改変したのは34行目~
// 技データ
int SkillCommand[ 256 ][ 256 ] =
{
// 波動拳
{ PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_RIGHT ,PAD_INPUT_A,-1 } ,
// 昇竜拳
{ PAD_INPUT_RIGHT , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN ,PAD_INPUT_A, -1 } ,
{ PAD_INPUT_RIGHT , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN ,PAD_INPUT_A,-1 } ,
// 技データ終端用-1
{ -1 } ,
} ;
と、103行目~
// キー入力処理を行う
void CommandInput( void )
{
int InputData , OldCursorData , CursorData ;
// 現在の入力状態を取得
InputData = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// カーソルキー入力のみのデータにする
CursorData = InputData ;
CursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN|
PAD_INPUT_A|PAD_INPUT_B|
PAD_INPUT_X|PAD_INPUT_Y;
// 前回のキー入力からカーソルキー入力のみを抽出
OldCursorData = OldInputData ;
OldCursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN|
PAD_INPUT_A|PAD_INPUT_B|
PAD_INPUT_X|PAD_INPUT_Y;
// 前フレームとキー入力に違いがあり、更にカーソルキーを押していた場合のみ記録する
if( CursorData != OldCursorData && CursorData != 0 )
{
// もし以前とのキー入力時間との差が同時押し判定時間内だった場合は以前のキー入力データに加算する
if( ( InputNum != 0 ) && ( NowTime - InputTime < INPUT_DOUJI_TIME ) )
{
InputBuf[ InputNum - 1 ] |= CursorData ;
}
else
{
// バッファにキー入力状態を保存する
InputBuf[ InputNum ] = CursorData ;
// 入力時間を残す
InputTime = NowTime ;
// 入力コマンドの数を増やす
InputNum ++ ;
}
}
// 何もしていない時間が規定以上経過していたら入力データをクリアする
if( InputTime != 0 && NowTime - InputTime > INPUT_VALID_TIME )
{
InitInputData() ;
}
// もしZボタンが押されていたら対応した技を検索する
if( ( ( InputData & ~CursorData & ~OldInputData ) & (PAD_INPUT_A|PAD_INPUT_B|PAD_INPUT_X|PAD_INPUT_Y) ) != 0 )
{
int SkillNum ;
// 対応している技を取得
SkillNum = SkillCheck() ;
// もし何の技も出していなければなにもしない
if( SkillNum != -1 )
{
// 技の名前をセット
strcpy( DrawSkillName , SkillName[ SkillNum ] ) ;
// 表示時間をセット
DrawTime = SKILL_DRAWTIME ;
}
// 入力データを初期化
InitInputData() ;
}
// 今フレームのキー入力状態を保存
OldInputData = InputData ;
}
です。他の部分はウィンドウモードに変更した以外は変えていません。
なんどか試してみたのですがうまくいかず、別のものが悪さしてるのかとサンプル改変でもうまくいきませんでした。
ビット演算子殆ど勉強しなかったのがいけなかったのでしょうか…
改変したのは34行目~
// 技データ
int SkillCommand[ 256 ][ 256 ] =
{
// 波動拳
{ PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_RIGHT ,PAD_INPUT_A,-1 } ,
// 昇竜拳
{ PAD_INPUT_RIGHT , PAD_INPUT_RIGHT | PAD_INPUT_DOWN , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN ,PAD_INPUT_A, -1 } ,
{ PAD_INPUT_RIGHT , PAD_INPUT_DOWN , PAD_INPUT_RIGHT | PAD_INPUT_DOWN ,PAD_INPUT_A,-1 } ,
// 技データ終端用-1
{ -1 } ,
} ;
と、103行目~
// キー入力処理を行う
void CommandInput( void )
{
int InputData , OldCursorData , CursorData ;
// 現在の入力状態を取得
InputData = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;
// カーソルキー入力のみのデータにする
CursorData = InputData ;
CursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN|
PAD_INPUT_A|PAD_INPUT_B|
PAD_INPUT_X|PAD_INPUT_Y;
// 前回のキー入力からカーソルキー入力のみを抽出
OldCursorData = OldInputData ;
OldCursorData &= PAD_INPUT_LEFT | PAD_INPUT_RIGHT |
PAD_INPUT_UP | PAD_INPUT_DOWN|
PAD_INPUT_A|PAD_INPUT_B|
PAD_INPUT_X|PAD_INPUT_Y;
// 前フレームとキー入力に違いがあり、更にカーソルキーを押していた場合のみ記録する
if( CursorData != OldCursorData && CursorData != 0 )
{
// もし以前とのキー入力時間との差が同時押し判定時間内だった場合は以前のキー入力データに加算する
if( ( InputNum != 0 ) && ( NowTime - InputTime < INPUT_DOUJI_TIME ) )
{
InputBuf[ InputNum - 1 ] |= CursorData ;
}
else
{
// バッファにキー入力状態を保存する
InputBuf[ InputNum ] = CursorData ;
// 入力時間を残す
InputTime = NowTime ;
// 入力コマンドの数を増やす
InputNum ++ ;
}
}
// 何もしていない時間が規定以上経過していたら入力データをクリアする
if( InputTime != 0 && NowTime - InputTime > INPUT_VALID_TIME )
{
InitInputData() ;
}
// もしZボタンが押されていたら対応した技を検索する
if( ( ( InputData & ~CursorData & ~OldInputData ) & (PAD_INPUT_A|PAD_INPUT_B|PAD_INPUT_X|PAD_INPUT_Y) ) != 0 )
{
int SkillNum ;
// 対応している技を取得
SkillNum = SkillCheck() ;
// もし何の技も出していなければなにもしない
if( SkillNum != -1 )
{
// 技の名前をセット
strcpy( DrawSkillName , SkillName[ SkillNum ] ) ;
// 表示時間をセット
DrawTime = SKILL_DRAWTIME ;
}
// 入力データを初期化
InitInputData() ;
}
// 今フレームのキー入力状態を保存
OldInputData = InputData ;
}
です。他の部分はウィンドウモードに変更した以外は変えていません。
Re:格闘ゲームのコマンド入力
今携帯からなのでちゃんと見れてないですが、
> // 対応している技を取得
> SkillNum = SkillCheck() ;
のあたりにブレークポイントをしかけて、
発動チェックまで来ているか、
バッファにどんな値がたまっているか、
あたりを確認してみてはいかがでしょうか。
> // 対応している技を取得
> SkillNum = SkillCheck() ;
のあたりにブレークポイントをしかけて、
発動チェックまで来ているか、
バッファにどんな値がたまっているか、
あたりを確認してみてはいかがでしょうか。
Re:格闘ゲームのコマンド入力
もしかすると、CursorDataの意味合いが変わったために、
InputData & ~CursorData
の部分で、入力状態に関係なく、毎回ゼロになってしまっているんじゃないでしょうか。
InputData & ~CursorData
の部分で、入力状態に関係なく、毎回ゼロになってしまっているんじゃないでしょうか。
Re:格闘ゲームのコマンド入力
>もしかすると、CursorDataの意味合いが変わったために、
>InputData & ~CursorData
>の部分で、入力状態に関係なく、毎回ゼロになってしまっているんじゃないでしょうか。
ご指摘のとおりでした。よく考えずにやってました。
ビットのことを調べ他いくつか変えたら(サンプル内では)完成しました!本当にありがとうございました!
>InputData & ~CursorData
>の部分で、入力状態に関係なく、毎回ゼロになってしまっているんじゃないでしょうか。
ご指摘のとおりでした。よく考えずにやってました。
ビットのことを調べ他いくつか変えたら(サンプル内では)完成しました!本当にありがとうございました!