ページ 11

ゲームパットを使うには?

Posted: 2009年11月12日(木) 08:54
by 電気屋
どうも、たびたびお世話になっています。
今回は、ゲームパットについてお聞きしたいと思っています。
ゲームパットからの入力データを得るにはどうしたらよいですか。一応ジョイパットのプログラムを参考にしたり、ほかのサイトのサンプルを使ったりして作成はしていますが、ゲームパットからの入力をうまく認識しません。サンプルをおいてくださると助かります。大変勝手なお願いですが、よろしくお願いします。

一応サンプルも貼り付けておきます。
要点
・ゲームパットから入力されたデータを確認する

最終目的
・キャラクターを動かす

使用コントローラ
・ELECOM(JC-2410TWH)

Re:ゲームパットを使うには?

Posted: 2009年11月12日(木) 12:22
by 御津凪
MSDN の下記のページにジョイスティック(ゲームコントローラのこと)を使用するためのチュートリアルがあります。
http://msdn.microsoft.com/ja-jp/library ... 85%29.aspx

一応、こちらでも適当なサンプルを書いてみますが…。

Re:ゲームパットを使うには?

Posted: 2009年11月12日(木) 14:28
by 御津凪
書いてきました。
コードが長いので添付しておきます。

一応、自作ライブラリから一部変更しての書き下ろしなので、何か問題があるかもしれません。

とりあえず、これに沿ってプログラムを組めば動くはずです。


なお、ジョイパッドの方向キーの状態を取得する場合、 DIJOYSTATE2(DIJOYSTATE) 構造体の lX, lY メンバ変数で下記のような条件で取得できます。

上: lY < 0 の時
下: lY > 0 の時
左: lX < 0 の時
右: lX > 0 の時

このとき、PSコントローラのようなスティックでも操作できるようになるのですが、
スティックはなにも触らなくても必ず 0 になることはなく、若干の偏りが発生するため、
上記のような判定でキャラクターを動かすようにしていた場合は、スティックが有効になったとたん、
勝手に移動することになってしまいます。

これを防ぐためには遊びの部分を作ることで対処します。
だいたい +-300 程度(軸の可動幅量を +-1000 とした時)でいいでしょう。
つまり、

上: lY < -300 の時
下: lY > +300 の時
左: lX < -300 の時
右: lX > +300 の時

となります。

Re:ゲームパットを使うには?

Posted: 2009年11月12日(木) 15:30
by 電気屋
どうもありがとうございました。

Re:ゲームパットを使うには?

Posted: 2009年11月18日(水) 14:13
by 電気屋
プログラムを組んだのですが、うまくいきません。どこがいけなかったでしょうか?

プログラム
if ( Key[ KEY_INPUT_UP ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_UP ) == 1){ //上ボタンが押されたら
ch.muki=0;} //上向きフラグを立てる
else if( Key[ KEY_INPUT_LEFT ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_LEFT ) == 1){ //左ボタンが押されたら
ch.muki=1;} //左向きフラグを立てる
else if( Key[ KEY_INPUT_DOWN ] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_DOWN ) == 1){ //下ボタンが押されたら
ch.muki=2;} //下向きフラグを立てる
else if( Key[ KEY_INPUT_RIGHT] == 1 || (GetJoypadInputState(DX_INPUT_PAD1) & PAD_INPUT_RIGHT) == 1){ //右ボタンが押されたら
ch.muki=3;} //右向きフラグを立てる
else //何のボタンも押されてなかったら
ch.walking_flag=0; //歩かないフラグを立てる


4方向に歩くプログラムのKEY_INPUTの後にGetJoypadInputStateをいれて試していますが、DAWNしか反応しません。コントローラがいけないのかと、コントロールパネルで動作確認をしたのですが、どこにも異常はありませんでした。