XNA メモ – コントローラーの振動機能に時間設定を付ける方法

Posted: 2012年2月19日 カテゴリー: プログラミングメモ, XNA, XNAメモ
タグ:, , , , , ,

今回は、前回紹介したコントローラーの振動方法に、タイマーを付けて自動的に振動を止める方法をメモります。

基本的にすることは、振動中はタイマーに経過時間を足し、設定した時間以上立っていれば振動を止めるだけです。

実装するにはまず、振動しているかを表すフラグ、タイマー、そして振動させる時間を保存する変数を宣言します。

float m_timer = 0.0f;            // 振動用のタイマー
bool m_isVibrating = false;      // 振動しているかどうか
float m_vibrationLength = 0.35f; // 振動している時間

次に、振動させ、タイマーなどを初期化する関数を作ります。この関数の第3引数は、何秒コントローラーを振動させるかを表します。

private void SetVibration(float left, float right, float length)
{
 GamePad.SetVibration(PlayerIndex.One, left, right);
 m_isVibrating = true;
 m_timer = 0.0f;
 m_vibrationLength = length;
}

次に、Update()メソッド内に、タイマーを更新し、止めるかどうかの判断をする処理を実装します。している事は、上で説明した物です。

// もし振動中なら
if (m_isVibrating)
{
 // タイマーに経過時間を足す
 m_timer += (float)gameTime.ElapsedGameTime.TotalSeconds;

 // タイマーが設定した時間になった時
 if (m_timer >= m_vibrationLength)
 {
 // 振動を止める
 GamePad.SetVibration(PlayerIndex.One, 0.0f, 0.0f);
 }
}

後は、SetVibration()メソッドを呼び、実際に振動させるだけです。

KeyboardState keystate = Keyboard.GetState();

if (keystate.IsKeyDown(Keys.Z))
{
 // コントローラー1を振動させる
 SetVibration(0.5f, 0.5f, 0.35f);
}

以上です。今回はコントローラー1に限定した実装なので、複数のコントローラーを使ったり、柔軟性を持たせたい場合は、変数を配列にしたり、SetVibration()メソッドにPlayerIndexを渡すようにしたりする事により実装できます。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中