ジョイスティック (Joystick)

概要

ジョイスティックからのからの入力を提供します。

エンジンのJoystickプロパティから現在のフレームのジョイスティックの状態を持った当クラスのインスタンスを取得できます。

ジョイスティックが持つボタンならびにアナログスティックの総数、ボタンの押し状態ならびにアナログスティックの倒し具合を調べることが出来ます。

ボタンの押し状態

押し状態は前のフレームと現在のフレームでそのボタンを押したかによって決まり、以下の4通りとなります。(○・・・押している、✕・・・押していない)

状態 前のフレーム 現在のフレーム
Free
Release
Push
Hold

アナログスティックの倒し具合

アナログスティックの倒し具合は、横方向(X)と縦方向(Y)それぞれに関して図に示すように実数値で表現されます。

アナログスティック

主なメソッド

名称 説明
GetJoystickName ジョイスティックの名称
GetButtonsCount ジョイスティックの持つボタンの総数
GetAxesCount ジョイスティックの持つアナログスティックの数
GetButtonState 指定した番号のボタンの押し状態
GetAxisState 指定した番号のアナログスティックの倒し具合

主なプロパティ

なし

主なイベント

なし

補足

このインスタンスを取得するには、JoystickContainerクラス内のGetJoystickAt関数を呼び出す必要があります。また、ジョイスティックの接続状態をRefreshAllJoysticks関数にて更新することができます。

使用方法

Joystickクラスのサンプルです。


  #include <ace.h>
  
  // Joystickのサンプル。ジョイスティックによる入力を取得しています。
  int main()
  {
      // AC-Engineを初期化する。
      ace::Engine::Initialize(ace::ToAString("Joystick").c_str(), 640, 480, ace::EngineOption());
  
      // ジョイスティックが最低一つ接続されているかどうかを確認する。
      if (!ace::Engine::GetJoystickContainer()->GetIsPresentAt(0))
      {
          // 一つも接続されていない場合は終了する
          ace::Engine::Terminate();
          printf("No joystick are connected.\n");
          return 0;
      }
  
      // AC-Engineのウインドウが閉じられていないか確認する。
      while (ace::Engine::DoEvents())
      {
          // 一つ目のジョイスティックの0番目のボタンの入力状態を表示する
          ace::Joystick* joystick = ace::Engine::GetJoystickContainer()->GetJoystickAt(0);
          switch (joystick->GetButtonState(0))
          {
          case ace::JoystickButtonState::Free: //前フレームと本フレームで非押下
              printf("Free\n");
              break;
          case ace::JoystickButtonState::Hold: //前フレームと本フレームで押下
              printf("Hold\n");
              break;
          case ace::JoystickButtonState::Release: //前フレームで押下、本フレームで非押下
              printf("Release\n");
              break;
          case ace::JoystickButtonState::Push: //前フレームで非押下、本フレームで押下
              printf("Push\n");
              break;
          }
  
          // AC-Engineを更新する。
          ace::Engine::Update();
      }
  
      //AC-Engineの終了処理をする。
      ace::Engine::Terminate();
  
      return 0;
  }