MonoGameのTouchPanel.GetState()で困惑した件

こんちゃ!洋梨🍐です。

今回は最近開発している「MonoGameをUnity風に開発できるライブラリ “YPMono”」を作ってる最中発生した原因不明のバグについてです。

どんなバグか?

タッチイベントを取得できるオブジェクトを2つ以上置くと2つ目以降がタッチイベントを取得できないといったバグです。

なぜ起きたか?

結果から言うと自分がTouchPanel.GetState()の仕様をしっかりと把握してなかったから生んでしまったバグでした👼具体的には

自分の思ってた仕様
同じライフサイクル上では同じ結果が返される

実際の仕様
同じライフサイクル上でもGetState()が一度呼ばれるとその次のGetState()では異なる値を返す

といったとこです。

具体的には?

タッチの状況を示すTouchCollection内の各Stateの部分が1度目はTouchLocationState.Pressedを返していても、2度目の取得ではTouchLocationState.Movedに代わっているところです。

↑同じUpdate内でも変わっている図

繰り返しますが同じサイクル上でもです。

つまり

var status = TouchPanel.GetState();
var status2 = TouchPanel.GetState();

と連続で書いた場合上と下では内容が違う事を意味します。

当たり前でしょって思われたらすいません。。。

なんかUnityの感覚なんでしょうか?同じタイミングのUpdate()で呼ばれたら同じイベントを取得できるみたいな感覚。

とりあえずこれが起因で発生したバグを直していこうと思います✌


ここまで読んでくれてありがとうございました!!

ホームページでは他にも

・様々な記事や作った作品および過程
・ソースコード、素材ファイル
・あらゆる”モノ”の作り方

などなど随時、記事や作品を新規公開・更新していますので是非見ていってくださいね!見ていただけると本当に嬉しいです!