ジョイパッド(コントローラー)の入力に応じて飛行機が動くプログラムを作成してみよう GetJoypadlnputState関数を使うことになります

ソーラー「さて 


キーボードからの入力に応じて


飛行機を動かすことができるようになったね


今度は


ジョイパッド(コントローラー)からの入力に応じて


飛行機が動くプログラムを作製してみよ~う」


マックス「ジョイパッド(コントローラー)か


たしかに


シューティングゲームで


ジョイパッド(コントローラー)がないと


ゲームをやりずらいよなあ


キーボードの



ボタンを


押す方法だと


自機の飛行機の繊細な動きはできないな


弾がたくさん


自機にふりかかってくるときなんか


キーボードの



ボタンを


押して


弾をよけるのは大変だぞ」



ソーラー「そうですね


ジョイパッド(コントローラー)の入力に応じて飛行機が動くようにできたらいいですね



ジョイパッド(コントローラー)の入力に応じて飛行機が動くようにするには


GetJoypadInputState関数を用いることになります


さて


GetJoypadInputState関数がどういった関数なのか


DXライブラリ置き場の


GetJoypadInputState関数の説明を見てみよう


以下


DXライブラリ置き場の


GetJoypadInputState関数の説明です

👇




宣言 int GetJoypadInputState( int InputType ) ;


概略 ジョイパッドの入力状態を得る


引数 InputType : 入力状態を取得するパッドの識別子

        DX_INPUT_KEY_PAD1  : キー入力とパッド1

        DX_INPUT_PAD1    : パッド1

        DX_INPUT_PAD2    : パッド2

        DX_INPUT_PAD3    : パッド3

        DX_INPUT_PAD4    : パッド4

        DX_INPUT_KEY     : キー入力


戻り値 パッドの入力状態


解説  指定した識別子のパッドの入力状態が返ります。

 入力状態取得タイプにキー入力とありますがこれはパッドとキー入力を別々に取得するのは面倒かなと思いつけた機能です、 DX_INPUT_KEY_PAD1 を指定するとキー入力と(キー入力のパッド入力の対応は以下の通り)パッド1の入力状態を得ることが出来ます。

 DX_INPUT_KEY は下記の対応表のキー入力部のみの入力状態を得ます。

 入力状態は int型 データとして返り、 次に示すパッドの入力マスクを戻り値とAND演算をして結果が0でなければそのボタンが押されている事を示します。


PAD_INPUT_DOWN  // ↓チェックマスク(下キー or テンキーの2キー)

PAD_INPUT_LEFT  // ←チェックマスク(左キー or テンキーの4キー)

PAD_INPUT_RIGHT  // →チェックマスク(右キー or テンキーの6キー)

PAD_INPUT_UP  // ↑チェックマスク(上キー or テンキーの8キー)

PAD_INPUT_1  // 1ボタンチェックマスク(Zキー)

PAD_INPUT_2  // 2ボタンチェックマスク(Xキー)

PAD_INPUT_3  // 3ボタンチェックマスク(Cキー)

PAD_INPUT_4  // 4ボタンチェックマスク(Aキー)

PAD_INPUT_5  // 5ボタンチェックマスク(Sキー)

PAD_INPUT_6  // 6ボタンチェックマスク(Dキー)

PAD_INPUT_7  // 7ボタンチェックマスク(Qキー)

PAD_INPUT_8  // 8ボタンチェックマスク(Wキー)

PAD_INPUT_9  // 9ボタンチェックマスク(ESCキー)

PAD_INPUT_10  // 10ボタンチェックマスク(スペースキー)

PAD_INPUT_28  // こんな感じで28番目のボタンまで対応しています(初期状態では11番以降はキーボードキーとの対応はありません)




例 パッド1の上ボタンが押されているか調べる


if( ( GetJoypadInputState( DX_INPUT_PAD1 ) & PAD_INPUT_UP ) == 0 )

{

// 押されていない

}

else

{

// 押されている

}


サンプル


 パッド1の9ボタン(ESCキー)が押されるまで待つ

Windows用

#include "DxLib.h"


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )

{

int Cr , PadInput ;


if( DxLib_Init() == -1 ) // DXライブラリ初期化処理

{

return -1; // エラーが起きたら直ちに終了

}


// 白色の値を取得

Cr = GetColor( 255 , 255 , 255 ) ;


// 文字列の描画

DrawString( 150 , 240 - 32 , "パッドのSTARTボタンを押してください" , Cr );


// パッド1の9ボタンの入力待ち

PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

while( ( PadInput & PAD_INPUT_9 ) == 0 )

{

// メッセージ処理

if( ProcessMessage() == -1 )

{

break ; // エラーが発生したらループを抜ける

}


// パッド1の入力を取得

PadInput = GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;

}


DxLib_End() ; // DXライブラリ使用の終了処理


return 0 ; // ソフトの終了

}




solarplexuss「・・・・・うう~ん・・・・・」



ソーラー「それでは


GetJoypadInputState関数の解説を行ってみましょう


GetJoypadInputState関数は以下のように用います


(使用例)

GetJoypadInputState( DX_INPUT_KEY_PAD1 ) ;



マックス「なにぃ この使用例?


なにをしておるぅ この関数は


何が行われるんだ?


意味が分からん


引数の


DX_INPUT_KEY_PAD1は何を意味しているんだよう~」



ソーラー「


ジョイパッドがパソコンに接続されていて


そのジョイパッドが


ジョイパッド1と


パソコンに認識されているとします


(ジョイパッドをジョイパッド1と認識する方法は後に解説されます)


ジョイパッド1のボタンが押されていないと


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値として0が返ります


ジョイパッド1のボタンが何か押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値としてジョイパッド1の今押されているボタンに対応した数値が返ることになります」


solarplexuss「ああ~?


あおお~?」


理解に苦しむsolarplexuss


ソーラー「ふふっ(*^。^*)


たとえば


ジョイパッド1のAボタンが押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値として


ジョイパッド1のAボタンに対応した数値が返ります


つまり


GetJoypadInputStateの引数の


DX_INPUT_KEY_PAD1は


ジョイパッド1に対応していて


ジョイパッド1のボタンが押されていないと


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値として0が返り



ジョイパッドのAボタンが押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値としてジョイパッド1のAボタンに対応した数値が返るんだね」


マックス「ほほう


ジョイパッド1のAボタンが押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値としてジョイパッド1のAボタンに対応した数値が返るか・・・


そうだな


となると・・・


たとえば


ジョイパッド1の十字キーの上ボタンが押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値として


ジョイパッド1の十字キーの上ボタンに対応した数値が返るのか?」


ソーラー「そうなんです


GetJoypadInputState( DX_INPUT_KEY_PAD1 );


が実行されたときの戻り値は


どのジョイパッド1のボタンが押されているかによって異なるんだね」


マックス「GetJoypadInputState( DX_INPUT_KEY_PAD1 );


だけを


みただけでは


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


どのような値が戻り値として返されているかわからないんじゃないか?」


ソーラー「Oh,Yes~~


そ・の・と・お・り


ジョイパッド1のボタンが押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


には


戻り値として


必ず


1が返るというようなことがおこるわけではないのです


押されているボタンによって


GetJoypadInputState( DX_INPUT_KEY_PAD1 )


に返る戻り値は変わってくるんだね」


solarplexuss「おお~なるほどぉ~」


ソーラー「


そして


DXライブラリを用いた場合


最大で4つまでの


ジョイパッド


を認識することができます


そのジョイパッドが


ジョイパッド3



パソコンに認識されていて


ジョイパッド3のボタンが押されていないと


GetJoypadInputState( DX_INPUT_KEY_PAD3)


には


戻り値として0が返ります



ジョイパッド3のBボタンが押されていると


GetJoypadInputState( DX_INPUT_KEY_PAD3 )


には


戻り値としてジョイパッド3のBボタンに対応する数値が返ることになります」




マックス「ふ~ん


GetJoypadInputState関数を用いれば


どのジョイパッドのどのボタンから入力されているかどうかを


判断する(識別する)ことができそうだな?」


ソーラー「そうなんです


GetJoypadInputState関数を用いれば


どのジョイパッドのどのボタンから入力されているかどうかを


判断する(識別する)ことができます


だって

どのジョイパッドのどのボタンから入力されているか


によって


戻り値の値は異なっているからね


その戻り値を見れば


どのジョイパッドのどのボタンから入力されているか


を判断することができるんだね


基本的には


飛行機がジョイパッドの入力に応じて


望みの方向に飛んでいくようにする過程においては



      🐤どのジョイパッドから入力されているかどうかを判断する🐤

      

      🐦さらに そのジョイパッド(コントローラー)のどのボタンから🐦


    🐦入力が行われているかを判断する🐦


という


2つの判断過程が必要なんだけど


GetJoypadInputState関数を用いれば


その2つの判断が


できてしまんだね」




マックス「2段階の判定ができるか・・・


いい関数じゃないか


GetJoypadInputState関数は・・・」




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る