マウスジェスチャー(3) btndownとisdown
 今までclickposによる座標の取得を行ってきましたが、マウスジェスチャーというのはドラッグされている間はずっと方向を取得し続けるものです。なので、そのように書き換えます。以下サンプルスクリプト。

;value2000
*define
mov %0,100
numalias x1,%0:inc %0
numalias y1,%0:inc %0
numalias x2,%0:inc %0
numalias y2,%0:inc %0
numalias dx,%0:inc %0
numalias dx_sign,%0:inc %0
numalias dy,%0:inc %0
numalias dy_sign,%0:inc %0
numalias temp,%0:inc %0

globalon
mov %0,2000
numalias sensitivity,%0:inc %0
mov %sensitivity,10

defsub abs_sgn
game

*start
btndef clear
btndown 1

*loop
caption ""
btnwait2 %0
if %0 = 0 getmousepos %x1,%y1:goto *gesture
goto *loop

*gesture
wait 5
isdown %temp
if %temp != 1 goto *start
getmousepos %x2,%y2

abs_sgn %x2 - %x1,%dx,%dx_sign
abs_sgn %y2 - %y1,%dy,%dy_sign

if %dx < %sensitivity && %dy < %sensitivity goto *gesture
if %dx >= %dy && %dx_sign > 0 caption "右"
if %dx >= %dy && %dx_sign < 0 caption "左"
if %dx <= %dy && %dy_sign > 0 caption "下"
if %dx <= %dy && %dy_sign < 0 caption "上"

mov %x1,%x2
mov %y1,%y2
goto *gesture

*abs_sgn
getparam %0,i%1,i%2
mov %3,1
if %0 < 0 mov %3,-1
mov %%1,%0 * %3
mov %%2,%3
return


 大きな変更点は「%sensitivityをグローバル変数にしたこと」と「clickposを廃止してgetmouseposで座標を取得するようにしたこと」です。これでかなりマウスジェスチャーっぽくなりましたね。
 次は、ジェスチャーとアクション(セーブとかロードとか)を対応させてみます。



 [2008年5月13日追記]
 書こうと思っていたのにすっかり忘れていました。
 btndownおよびisdownの使い方については、幻惑郷 : btndownとisdownに書いてあります。
[PR]
by lyricist_m | 2008-05-11 21:39 | NScripter
<< 引数ライブラリ修正 ブログ名を変更しました。 >>