MGL::Input::Touch#

概要#

MGL::Input::Touchはタッチ入力の状態を取得するためのクラスです。

宣言#

namespace MGL::Input
{
    class Touch;
}

メンバ情報#

種類

名前

内容

関数

コンストラクタ

関数

IsAvailable

タッチ入力が利用可能かを取得

関数

IsEnabled

取得したタッチ入力が有効かを取得

関数

operator bool()

bool型へのキャストで有効状態を取得

関数

operator!()

有効状態を否定演算子で取得

関数

GetTouchID

タッチ入力の識別子を取得

関数

GetTouchFrameCount

タッチされている期間をフレーム単位で取得

関数

IsTouchedFirst

タッチされた瞬間であるかを取得

関数

GetPosition

タッチ座標を取得

関数

GetPrevPosition

前のフレームのタッチ座標を取得

関数

GetDeltaMove

前のフレームからの移動量を取得

関数

GetUVPosition

タッチ座標をUV座標系で取得

関数

GetUVPrevPosition

前のフレームのタッチ座標UV座標系でを取得

関数

GetUVDeltaMove

前のフレームからの移動量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

取得する範囲を表す矩形

説明#

指定された引数でタッチ状態を取得して初期化します。条件に一致するタッチ入力が行われている場合はIsEnabledtrueを返すオブジェクトを生成します。

(1) はインデックス指定による取得です。タッチ状態はMGL::Input::kMultiTouchCountの要素数を持った配列で保持されており、タッチを認識した際に最も小さい空きインデックスへと格納されます。指定したインデックスに有効な状態が格納されているかは、オブジェクト生成後にIsEnabledを呼び出して判断します。

(2) はMGL::Input::TouchIDを指定した取得です。有効なオブジェクトはGetTouchIDが一意の識別子を返し、この値を使用して継続した入力状態の追跡が可能となります。タッチデバイスから指を離した場合、その識別子は失効されIsEnabledfalseを返すようになります。

(3) は指定した範囲内でタッチされているかを検索し、マッチするものがある場合はその状態を取得して初期化します。指定範囲内で複数のタッチが行われている場合、最もインデックスの小さいものが優先されます。指定範囲内でタッチが行われていない場合、IsEnabledfalseを返すオブジェクトを生成します。

引数を省略した場合、インデックスに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を返す条件は、IsEnabledtrueかつGetTouchFrameCount1を返す状態となります。

利用例#

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で調整可能です。

オブジェクトが無効な場合、またはIsTouchedFirsttrueを返す状況においては、この関数の戻り値は常に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で調整可能です。

オブジェクトが無効な場合、またはIsTouchedFirsttrueを返す状況においては、この関数の戻り値は常に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で調整可能です。

オブジェクトが無効な場合、またはIsTouchedFirsttrueを返す状況においては、この関数の戻り値は常に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);
    }
}

関連#