表示するサンプルコードの言語を指定できます。
ジョイスティック (Joystick)
概要
ジョイスティックからのからの入力を提供します。
エンジンのJoystickプロパティから現在のフレームのジョイスティックの状態を持った当クラスのインスタンスを取得できます。
ジョイスティックが持つボタンならびにアナログスティックの総数、ボタンの押し状態ならびにアナログスティックの倒し具合を調べることが出来ます。
ボタンの押し状態
押し状態は前のフレームと現在のフレームでそのボタンを押したかによって決まり、以下の4通りとなります。(○・・・押している、✕・・・押していない)
状態 | 前のフレーム | 現在のフレーム |
---|---|---|
Free | ✕ | ✕ |
Release | ○ | ✕ |
Push | ✕ | ○ |
Hold | ○ | ○ |
アナログスティックの倒し具合
アナログスティックの倒し具合は、横方向(X)と縦方向(Y)それぞれに関して図に示すように実数値で表現されます。
一部のゲームパッドについて
一部のゲームパッドでは、ボタンの状態を取得するのに、ボタンの番号でなくボタン名で取得できます。
一部のゲームパッドはPS4、XBOX360、XBOX ONEのゲームパッドです。
JoystickButtonType
をGetButtonStateAt
メソッドの引数に指定することで押し状態を取得できます。
もしくは、JoystickAxisType
をGetAxisStateAt
メソッドの引数に指定することで倒し具合を取得できます。
サンプルの追加
主なメソッド
名称 | 説明 |
---|---|
GetJoystickName | ジョイスティックの名称 |
GetButtonsCount | ジョイスティックの持つボタンの総数 |
GetAxesCount | ジョイスティックの持つアナログスティックの数 |
GetButtonState | 指定した番号のボタンの押し状態 |
GetAxisState | 指定した番号のアナログスティックの倒し具合 |
GetButtonStateAt | 指定した名称のボタンの押し状態 |
GetAxisStateAt | 指定した名称のアナログスティックの倒し具合 |
主なプロパティ
なし
主なイベント
なし
補足
このインスタンスを取得するには、JoystickContainerクラス内のGetJoystickAt関数を呼び出す必要があります。また、ジョイスティックの接続状態をRefreshAllJoysticks関数にて更新することができます。
使用方法
Joystickクラスのサンプルです。
一部のゲームパッドを使用する場合のサンプルです。
C++
#include <Altseed.h>
/**
@brief 一部のゲームパッドから入力状態を取得するサンプル。
*/
int main()
{
// Altseedを初期化する。
asd::Engine::Initialize(u"Joystick_GamePad", 640, 480, asd::EngineOption());
// ジョイスティックの状態を表示するテキストを生成する。
auto font = asd::Engine::GetGraphics()->CreateDynamicFont(u"", 25, asd::Color(255, 255, 255, 255), 1, asd::Color(0, 0, 0, 255));
// ボタンの入力状態を表示する文字描画オブジェクトを設定して、エンジンに追加する。
auto stateText = std::make_shared<asd::TextObject2D>();
stateText->SetPosition(asd::Vector2DF(10, 5));
stateText->SetFont(font);
asd::Engine::AddObject2D(stateText);
// ボタンをたくさん認識する可能性があるため行間を詰める。
stateText->SetLineSpacing(-15);
// Altseedのウインドウが閉じられていないか確認する。
while (asd::Engine::DoEvents())
{
asd::astring displayStr = asd::ToAString("");
// ジョイスティックが接続されているかどうかを確認する。
if (!asd::Engine::GetJoystickContainer()->GetIsPresentAt(0))
{
displayStr += u"ジョイスティックが接続されていません。";
}
else if (asd::Engine::GetJoystickContainer()->GetJoystickAt(0)->GetJoystickType() == asd::JoystickType::Other)
{
displayStr += u"認識できないジョイステイックです。";
}
else
{
// 1つ目のジョイスティックのボタンの入力状態を表示する。
// RightRightはPSの場合〇、XBOXの場合、Bボタンを示す。
auto joystick = asd::Engine::GetJoystickContainer()->GetJoystickAt(0);
auto state = joystick->GetButtonStateAt(asd::JoystickButtonType::RightRight);
if (state == asd::ButtonState::Free) //前フレームと本フレームで非押下
{
displayStr += u"ボタンを離しています。";
}
else if (state == asd::ButtonState::Hold) //前フレームと本フレームで押下
{
displayStr += u"ボタンを押しています。";
}
else if (state == asd::ButtonState::Release) //前フレームで押下、本フレームで非押下
{
displayStr += u"ボタンを離しました!";
}
else if (state == asd::ButtonState::Push) //前フレームで非押下、本フレームで押下
{
displayStr += u"ボタンを押しました!";
}
}
stateText->SetText(displayStr.c_str());
// Altseedを更新する。
asd::Engine::Update();
}
//Altseedの終了処理をする。
asd::Engine::Terminate();
return 0;
}
C#
/// <summary>
/// 一部のゲームパッドから入力状態を取得するサンプル。
/// </summary>
class Joystick_GamePad
{
public string Description
{
get { return "一部のゲームパッドの入力状態を調べ、表示するサンプルです。"; }
}
public string Title
{
get { return "ゲームパッド入力"; }
}
public string ClassName
{
get { return "Joystick_GamePad"; }
}
[System.STAThread]
static void Main(string[] args)
{
// Altseedを初期化する。
asd.Engine.Initialize("Joystick_GamePad", 640, 480, new asd.EngineOption());
// ジョイスティックの状態を表示するテキストを生成する。
var font = asd.Engine.Graphics.CreateDynamicFont("", 25, new asd.Color(255, 255, 255, 255), 1, new asd.Color(0, 0, 0, 255));
// ボタンの入力状態を表示する文字描画オブジェクトを設定して、エンジンに追加する。
var stateText = new asd.TextObject2D();
stateText.Position = new asd.Vector2DF(10, 5);
stateText.Font = font;
asd.Engine.AddObject2D(stateText);
//ボタンをたくさん認識する可能性があるため表示の行間を詰める。
stateText.LineSpacing = -15;
// Altseedのウインドウが閉じられていないか確認する。
while (asd.Engine.DoEvents())
{
string displayStr = "";
// ジョイスティックが接続されているかどうかを確認する。
if (!asd.Engine.JoystickContainer.GetIsPresentAt(0))
{
displayStr += "ジョイスティックが接続されていません。";
}
else if (asd.Engine.JoystickContainer.GetJoystickAt(0).JoystickType == asd.JoystickType.Other)
{
displayStr += "認識できないジョイステイックです。";
}
else
{
// 1つ目のジョイスティックのボタンの入力状態を表示する。
// RightRightはPSの場合〇、XBOXの場合、Bボタンを示す。
var joystick = asd.Engine.JoystickContainer.GetJoystickAt(0);
var state = joystick.GetButtonStateAt(asd.JoystickButtonType.RightRight);
if (state == asd.ButtonState.Free) //前フレームと本フレームで非押下
{
displayStr += ("ボタンを離しています。");
}
else if (state == asd.ButtonState.Hold) //前フレームと本フレームで押下
{
displayStr += ("ボタンを押しています。");
}
else if (state == asd.ButtonState.Release) //前フレームで押下、本フレームで非押下
{
displayStr += ("ボタンを離しました!");
}
else if (state == asd.ButtonState.Push) //前フレームで非押下、本フレームで押下
{
displayStr += ("ボタンを押しました!");
}
}
stateText.Text = displayStr;
// Altseedを更新する。
asd.Engine.Update();
}
//Altseedの終了処理をする。
asd.Engine.Terminate();
}
}
Java
/**
* 一部のゲームパッドから入力状態を取得するサンプル。
*/
class Joystick_GamePad
{
public java.lang.String getDescription() {
return "一部のゲームパッドの入力状態を調べ、表示するサンプルです。";
}
public java.lang.String getTitle() {
return "ゲームパッド入力";
}
public java.lang.String getClassName() {
return "Joystick_GamePad";
}
public static void main(String args[])
{
// Altseedを初期化する。
asd.Engine.Initialize("Joystick_GamePad", 640, 480, new asd.EngineOption());
// ジョイスティックの状態を表示するテキストを生成する。
asd.Font font = asd.Engine.getGraphics().CreateDynamicFont("", 25, new asd.Color(255, 255, 255, 255), 1, new asd.Color(0, 0, 0, 255));
// ボタンの入力状態を表示する文字描画オブジェクトを設定して、エンジンに追加する。
asd.TextObject2D stateText = new asd.TextObject2D();
stateText.setPosition(new asd.Vector2DF(10, 5));
stateText.setFont(font);
asd.Engine.AddObject2D(stateText);
// ボタンをたくさん認識する可能性があるため表示の行間を詰める。
stateText.setLineSpacing(-15);
// Altseedのウインドウが閉じられていないか確認する。
while(asd.Engine.DoEvents())
{
java.lang.String displayStr = "";
// ジョイスティックが接続されているかどうかを確認する。
if(!asd.Engine.getJoystickContainer().GetIsPresentAt(0))
{
displayStr += "ジョイスティックが接続されていません。";
}
else
{
if((asd.Engine.getJoystickContainer().GetJoystickAt(0).getJoystickType() == asd.JoystickType.Other))
{
displayStr += "認識できないジョイステイックです。";
}
else
{
// 1つ目のジョイスティックのボタンの入力状態を表示する。
// RightRightはPSの場合〇、XBOXの場合、Bボタンを示す。
asd.Joystick joystick = asd.Engine.getJoystickContainer().GetJoystickAt(0);
asd.ButtonState state = joystick.GetButtonStateAt(asd.JoystickButtonType.RightRight);
if((state == asd.ButtonState.Free))
{
displayStr += "ボタンを離しています。";
}
else
{
if((state == asd.ButtonState.Hold))
{
displayStr += "ボタンを押しています。";
}
else
{
if((state == asd.ButtonState.Release))
{
displayStr += "ボタンを離しました!";
}
else
{
if((state == asd.ButtonState.Push))
{
displayStr += "ボタンを押しました!";
}
}
}
}
}
}
stateText.setText(displayStr);
// Altseedを更新する。
asd.Engine.Update();
}
// Altseedの終了処理をする。
asd.Engine.Terminate();
}
}