2016年12月28日水曜日

■HSP3Dish上でのタッチ処理は「getkey」や「stick」ではなく「mtlist / mtinfo」を使うこと

例えば、以下のようなソースを組んだ場合、Windows上で動かしたときにどのような問題が出るでしょうか?


;--------------------------------------------
; 開始
;--------------------------------------------

#include "hsp3dish.as"

#const KEY_LEFT_CLICK 1

      setcls 1, $000000
      color 255, 255, 255

*main

      redraw 0

      tap = 0
      getkey tap, KEY_LEFT_CLICK
      pos 0, 0 : mes str(tap)

      redraw 1

      await 16
      goto *main

;--------------------------------------------
; 終わり
;--------------------------------------------



このソース内容は、ウィンドウ内をマウスで左クリックしている間ウィンドウの左上の位置に「1」が表示されるようになっています。

実際に実行してみると、確かにウィンドウ内を左クリックしている間は画面上に「1」が表示されます。
一見全く問題の無いようなソースですが、画面タッチが可能なWindowsタブレットPC等でこのソースを実行し、左クリックの代わりに画面をタッチすると何が問題なのかが分かります。

実は画面タッチ可能なWindowsタブレットPC等でこのソースを実行すると、画面をタッチしても画面上に「1」は表示されません。
もう少し詳しく書きますと、「getkey」命令の箇所で「1」ではなく「0」が返ってきます。

表示される答えとしては「画面をダブルタップ」すると画面上に「1」が表示されます。
つまり、ダブルタップをしないと「getkey」命令の箇所でクリックと判定されないのです。
これは「stick」命令についても同様です。

これがHSP3Dish上の仕様なのか不具合なのかはわかりませんが、Androidアプリを想定してプログラム作るのであれば、マルチタッチに対応している「mtlist / mtinfo」を使うように心がけましょう。

ミニアクション「みにぼう」チュートリアル動画

簡単なチュートリアルを作りました。