MGL::Input::Touch
Contents
MGL::Input::Touch#
概要#
MGL::Input::Touchはタッチ入力の状態を取得するためのクラスです。
宣言#
namespace MGL::Input
{
class Touch;
}
メンバ情報#
種類 |
名前 |
内容 |
---|---|---|
関数 |
||
関数 |
タッチ入力が利用可能かを取得 |
|
関数 |
取得したタッチ入力が有効かを取得 |
|
関数 |
bool型へのキャストで有効状態を取得 |
|
関数 |
有効状態を否定演算子で取得 |
|
関数 |
タッチ入力の識別子を取得 |
|
関数 |
タッチされている期間をフレーム単位で取得 |
|
関数 |
タッチされた瞬間であるかを取得 |
|
関数 |
タッチ座標を取得 |
|
関数 |
前のフレームのタッチ座標を取得 |
|
関数 |
前のフレームからの移動量を取得 |
|
関数 |
タッチ座標をUV座標系で取得 |
|
関数 |
前のフレームのタッチ座標UV座標系でを取得 |
|
関数 |
前のフレームからの移動量UV座標系でを取得 |
コンストラクタ#
宣言#
namespace MGL::Input
{
class Touch
{
public:
// (1) インデックスで取得
Touch(size_t index = 0) noexcept;
// (2) 識別子で取得
Touch(TouchID touchID) noexcept;
// (3) 矩形を指定して取得
Touch(const Rectangle &rectangle) noexcept;
};
}
引数#
- (1) インデックスで取得
- size_t index
0
からMGL::Input::kMultiTouchCountまでのインデックス
- (2) 識別子で取得
- MGL::Input::TouchID touchID
タッチ入力の識別子
- (3) 矩形を指定して取得
- MGL::Rectangle rectangle
取得する範囲を表す矩形
説明#
指定された引数でタッチ状態を取得して初期化します。条件に一致するタッチ入力が行われている場合はIsEnabledがtrue
を返すオブジェクトを生成します。
(1) はインデックス指定による取得です。タッチ状態はMGL::Input::kMultiTouchCountの要素数を持った配列で保持されており、タッチを認識した際に最も小さい空きインデックスへと格納されます。指定したインデックスに有効な状態が格納されているかは、オブジェクト生成後にIsEnabledを呼び出して判断します。
(2) はMGL::Input::TouchIDを指定した取得です。有効なオブジェクトはGetTouchIDが一意の識別子を返し、この値を使用して継続した入力状態の追跡が可能となります。タッチデバイスから指を離した場合、その識別子は失効されIsEnabledがfalse
を返すようになります。
(3) は指定した範囲内でタッチされているかを検索し、マッチするものがある場合はその状態を取得して初期化します。指定範囲内で複数のタッチが行われている場合、最もインデックスの小さいものが優先されます。指定範囲内でタッチが行われていない場合、IsEnabledがfalse
を返すオブジェクトを生成します。
引数を省略した場合、インデックスに0
を指定したものとして扱われます。
利用例#
タッチデバイスの読み取りを参照してください。
関連#
IsAvailable#
タッチ入力が利用可能かを取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
static bool IsAvailable() noexcept
};
}
戻り値#
- bool
利用可能である場合に
true
、利用不可能である場合はfalse
説明#
実行中の環境でタッチデバイスが利用可能であるかを取得します。この関数がfalse
を返す環境ではタッチ入力を利用できません。
この関数はstatic関数であり、オブジェクトを生成せずに呼び出し可能です。
利用例#
if (MGL::Input::Touch::IsAvailable())
{
MGL_TRACE("タッチデバイスが利用可能");
}
else
{
MGL_TRACE("タッチデバイスは利用不可能");
}
IsEnabled#
取得したタッチ入力が有効かを取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr bool IsEnabled() const noexcept;
};
}
戻り値#
- bool
タッチが有効であれば
true
、無効であればfalse
説明#
タッチが有効であるかを取得します。コンストラクタで有効なタッチ状態を取得できなかった場合、この関数がfalse
を返します。
この関数の戻り値は、このオブジェクトをbool
型にキャストして得られる値と等価です。
利用例#
MGL::Input::Touch touch;
if (touch.IsEnabled())
{
MGL_TRACE("タッチを認識");
}
関連#
operator bool()#
bool型へのキャストで有効状態を取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
explicit constexpr operator bool() const noexcept;
};
}
戻り値#
- bool
タッチが有効であれば
true
、無効であればfalse
説明#
タッチが有効であるかを取得します。コンストラクタで有効なタッチ状態を取得できなかった場合、この関数がfalse
を返します。
この関数の戻り値はIsEnabledと等価です。
利用例#
MGL::Input::Touch touch;
if (touch)
{
MGL_TRACE("タッチを認識");
}
関連#
operator!()#
有効状態を否定演算子で取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
constexpr bool operator!() const noexcept;
};
}
戻り値#
- bool
タッチが無効であれば
true
、有効であればfalse
説明#
タッチが無効であるかを取得します。コンストラクタで有効なタッチ状態を取得できなかった場合、この関数がtrue
を返します。
この関数の戻り値はIsEnabledおよびoperator!()とは逆の状態を返します。
利用例#
MGL::Input::Touch touch(0)
if (!touch)
{
MGL_TRACE("0番はタッチされていない");
}
関連#
GetTouchID#
タッチ入力の識別子を取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr TouchID GetTouchID() const noexcept;
};
}
戻り値#
- MGL::Input::TouchID
タッチ入力の識別子。入力が無効な場合はMGL::Input::TouchID::Invalid
説明#
オブジェクトが有効である場合、そのタッチを表す一意の識別子を返します。この関数で得た値は、コンストラクタの引数に指定することで同じ入力状態を取得できるようになります。
オブジェクトが無効な場合はMGL::Input::TouchID::Invalidが返ります。
利用例#
// (100, 100) から (300, 300)の範囲のタッチをチェックし、その識別子を取得する例
// タッチ範囲を定義
const MGL::Rectangle kTouchArea(100.0f, 100.0f, 300.0f, 300.0f);
// 範囲内のタッチを取得
MGL::Input::Touch touch(kTouchArea);
if (touch.IsTouchedFirst())
{
// この touchID を保持しておけば、指が離されるまでその入力を追跡できる
auto touchID = touch.GetTouchID();
}
関連#
GetTouchFrameCount#
タッチされている期間をフレーム単位で取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr uint32_t GetTouchFrameCount() const noexcept;
};
}
戻り値#
- uint32_t
タッチされているフレーム数
説明#
取得した入力状態のタッチ期間をフレーム単位で取得します。有効なオブジェクトが返す最小値は1
です。
オブジェクトが無効な場合は0
が返ります。
利用例#
MGL::Input::Touch touch;
if (touch)
{
MGL_TRACE("タッチフレーム数: %d", touch.GetTouchFrameCount());
}
関連#
IsTouchedFirst#
タッチされた瞬間であるかを取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr bool IsTouchedFirst() const noexcept;
};
}
戻り値#
- bool
タッチされた瞬間であれば
true
、そうでなければfalse
説明#
タッチ入力が行われた最初のフレームであるかを取得します。
この関数がtrue
を返す条件は、IsEnabledがtrue
かつGetTouchFrameCountが1
を返す状態となります。
利用例#
MGL::Input::Touch touch;
if (touch.IsTouchedFirst())
{
MGL_TRACE("タッチされた");
}
関連#
GetPosition#
タッチ座標を取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr const Vector2 &GetPosition() const noexcept;
};
}
戻り値#
- const MGL::Vector2 &
タッチ座標
説明#
タッチされた座標を取得します。
タッチ座標の基準範囲と単位は、デフォルトでは画面またはウィンドウの物理解像度に準じています。この基準はMGL::Input::TouchSettings::SetBoundsで調整可能です。
オブジェクトが無効な場合、この関数の戻り値は常にMGL::Vector2(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Touch touch;
if (touch.IsTouchedFirst())
{
auto touchPosition = touch.GetPosition();
MGL_TRACE("タッチ座標: %f, %f", touchPosition.x, touchPosition.y);
}
関連#
GetPrevPosition#
前のフレームのタッチ座標を取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr const Vector2 &GetPrevPosition() const noexcept;
};
}
戻り値#
- const MGL::Vector2 &
前のフレームのタッチ座標
説明#
前のフレームのタッチ座標を取得します。
タッチ座標の基準範囲と単位は、デフォルトでは画面またはウィンドウの物理解像度に準じています。この基準はMGL::Input::TouchSettings::SetBoundsで調整可能です。
オブジェクトが無効な場合、またはIsTouchedFirstがtrue
を返す状況においては、この関数の戻り値は常にMGL::Vector2(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Touch touch;
// タッチ2フレーム目で1フレーム目の座標を取得
if (touch.GetTouchFrameCount() == 2)
{
auto touchPosition = touch.GetPrevPosition();
MGL_TRACE("前回のタッチ座標: %f, %f", touchPosition.x, touchPosition.y);
}
関連#
GetDeltaMove#
前のフレームからの移動量を取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr const Vector2 &GetDeltaMove() const noexcept;
};
}
戻り値#
- const MGL::Vector2 &
前のフレームからの移動量
説明#
現在のタッチ座標と1フレーム前のタッチ座標との差分を取得します。
タッチ座標の基準範囲と単位は、デフォルトでは画面またはウィンドウの物理解像度に準じています。この基準はMGL::Input::TouchSettings::SetBoundsで調整可能です。
オブジェクトが無効な場合、またはIsTouchedFirstがtrue
を返す状況においては、この関数の戻り値は常にMGL::Vector2(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Touch touch;
if (touch)
{
auto deltaMove = touch.GetDeltaMove();
if (!deltaMove.IsZero())
{
MGL_TRACE("移動量: %f, %f", deltaMove.x, deltaMove.y);
}
}
関連#
GetUVPosition#
タッチ座標をUV座標系で取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr const Vector2 &GetUVPosition() const noexcept;
};
}
戻り値#
- const MGL::Vector2 &
正規化されたタッチ座標
説明#
タッチされた座標をUV座標系で取得します。
この関数が返す座標は、基準となる範囲内において0.0から1.0で正規化された値となります。タッチ位置が基準の範囲外にある場合は負数や1.0以上となります。
基準となる範囲はデフォルトでは画面またはウィンドウの全領域であり、MGL::Input::TouchSettings::SetBoundsで調整可能です。
オブジェクトが無効な場合、この関数の戻り値は常にMGL::Vector2(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Touch touch;
if (touch.IsTouchedFirst())
{
auto touchPosition = touch.GetUVPosition();
MGL_TRACE("タッチ座標: %f, %f", touchPosition.x, touchPosition.y);
}
関連#
GetUVPrevPosition#
前のフレームのタッチ座標UV座標系でを取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr const Vector2 &GetUVPrevPosition() const noexcept;
};
}
戻り値#
- const MGL::Vector2 &
正規化された前のフレームのタッチ座標
説明#
前のフレームのタッチ座標をUV座標系で取得します。
この関数が返す座標は、基準となる範囲内において0.0から1.0で正規化された値となります。タッチ位置が基準の範囲外にある場合は負数や1.0以上となります。
基準となる範囲はデフォルトでは画面またはウィンドウの全領域であり、MGL::Input::TouchSettings::SetBoundsで調整可能です。
オブジェクトが無効な場合、この関数の戻り値は常にMGL::Vector2(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Touch touch;
// タッチ2フレーム目で1フレーム目の座標を取得
if (touch.GetTouchFrameCount() == 2)
{
auto touchPosition = touch.GetUVPrevPosition();
MGL_TRACE("前回のタッチ座標: %f, %f", touchPosition.x, touchPosition.y);
}
関連#
GetUVDeltaMove#
前のフレームからの移動量UV座標系でを取得
宣言#
namespace MGL::Input
{
class Touch
{
public:
[[nodiscard]] constexpr const Vector2 &GetUVDeltaMove() const noexcept;
};
}
戻り値#
- const MGL::Vector2 &
前のフレームからの移動量
説明#
現在のタッチ座標と1フレーム前のタッチ座標との差分をUV座標系で取得します。
この関数が返す座標は、基準となる範囲内において0.0から1.0で正規化された値となります。タッチ位置が基準の範囲外にある場合は負数や1.0以上となります。
基準となる範囲はデフォルトでは画面またはウィンドウの全領域であり、MGL::Input::TouchSettings::SetBoundsで調整可能です。
オブジェクトが無効な場合、またはIsTouchedFirstがtrue
を返す状況においては、この関数の戻り値は常にMGL::Vector2(0.0f, 0.0f)
となります。
利用例#
MGL::Input::Touch touch;
if (touch)
{
auto deltaMove = touch.GetUVDeltaMove();
if (!deltaMove.IsZero())
{
MGL_TRACE("移動量: %f, %f", deltaMove.x, deltaMove.y);
}
}