dポイントプレゼントキャンペーン実施中!

連続して質問して申し訳ありませんがどうか質問させてください。
早速ですがDirectInputのモジュールを作っているんですが、
ジョイスティックからのデータの受け取りで、
各ボタンは問題ないのですが、十字ボタンからのデータを、
うまく認識してくれません。

●Input.h
--省略--
class Input{
public:
BOOL JoyData(int ButtonNo);
BOOL UP() {return JoyData(0);}
BOOL DOWN() {return JoyData(1);}
};

●Input.cpp
BOOL Input::JoyData(int No)
{
DIJOYSTATE2 js;
m_pJoystick->Acquire();
m_pJoystick->GetDeviceState(sizeof(DIJOYSTATE2), &js);

switch(ButtonNo){
case 0:
if(js.lY < 0) return TRUE; // Up
break;
case 1:
if(js.lY > 0) return TRUE; // DOWN
break;
}
}

●Main.cpp

HRESULT hr;
if( FAILED( hr = CMyD3DApplication::FrameMove(fElapsedTime))) return hr;

D3DXMATRIX matWorld;
D3DXMATRIX matRotY;
D3DXMATRIX matRotX;

m_DInput.JoyUpdate();
if(m_DInput.UP()) m_fWorldRotX += m_fElapsedTime * 0.5f; //UP
if(m_DInput.DOWN()) m_fWorldRotX -= m_fElapsedTime * 0.5f; //DOWN

D3DXMatrixRotationX( &matRotX, m_fWorldRotX );


ポリゴン一つ表示させているのですが、十字ボタンを押していないのに勝手に
下側に動き出してしまうのです。
十字ボタンはどの様な値でゲームパッドからデータを受け取っているのでしょうか
この十字ボタンがうまく動かない現象どうかご教授おねがいします。

A 回答 (1件)

いい加減に物言うと、まあ大体のジョイパットって、入力値に微妙なゴミの


値が必ずと言っていいほど入るので、

if(js.lY < 0) return TRUE; // Up

とかみたいに 0 で判定取るのはよくないです。
デバックで常にどんな値が入っているか確認してみてください。
定まっていないはずです。
まあ初期化時の軸範囲次第ですが、軸範囲が 10000 なら 2000 ~ 4000 位で取ると
良いかもです。

まあどうしても 0 でやりたいと言うのなら
DirectInput の初期化時にデットゾーンを指定してみてください。

DIPROP_DEADZONE がキーワードです。

ただ、デットゾーンに関してはなんか上手いこと簡単な資料がぱっと
見つからないんですよ。コレが
参考URLはMSDNです。

簡単にやるやら、0 で判定しないのが楽です。

参考URL:http://msdn.microsoft.com/library/ja/default.asp …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!