フィールドを所定の位置へ指定したサイズへと、リアルタイムに移動・変化させるハンドラを作ってみます。このmakeハンドラは、移動後のフィールドの左上座標と右下座標、移動するフィールドの名前、そして移動スピードをデータとして与えるだけで移動してくれるというものです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
on make ix1,iy1,ix2,iy2,name,speed
put the rect of cd fld name into a
put item 1 of a into x1
put item 2 of a into y1
put item 3 of a into x2
put item 4 of a into y2
put (ix1-x1)/speed into vx1
put (iy1-y1)/speed into vy1
put (ix2-x2)/speed into vx2
put (iy2-y2)/speed into vy2
repeat with i=1 to speed
put x1+vx1 into x1
put y1+vy1 into y1
put x2+vx2 into x2
put y2+vy2 into y2
set the rect of cd fld name to round(x1),round(y1),round(x2),round(y2)
end repeat
end make
|
使用方法: make x1,y1,x2,y2,name,speed
移動後のフィールドのrect座標とフィールドの名前を引数として与えます。rect座標ですから、x1、y1には左上の座標を、x2、y2には右下の座標を代入すれば良いです。nameには、フィールドの名前を代入します。speedには、移動時のスピードを代入するのですが、この値を小さくすればするほど速くなり、大きくすれば遅くなります。
makeハンドラを打ち込んだなら、メッセージボックスから使用方法に書いた1行を打ち込んでみて下さい。使ってみれば、どういうものかすぐに理解できると思います。
例: make 100,100,300,300,fld_sc,100
on make ix1,iy1,ix2,iy2,na
1行目は、makeハンドラの始まりを表します。ハンドラ名の後に続くものは、makeハンドラの引数を表しています。makeハンドラ呼び出し時に与えたデータを、順番にix1、iy1、ix2、iy2、nameに代入します。
put the rect of cd fld na into a
2行目では、引数として与えられたフィールドのrect座標を取り出し、変数aに代入します。変数aは一時的に使用するものですので、変数名に深い意味はありません。
put (ix1-x1)/speed into vx1
7行目から10行目では、移動前の座標から移動後の座標への移動するための1回当たりの移動量を計算しています。左上のx座標とy座標、右下のx座標とy座標、それぞれについての移動量の計算ですから、4回計算をしています。
speedで割っていますので、割る数が大きいほど、ゆっくりと移動するということになります。
repeat with i=1 to speed
12行目から16行目までのrepeatループをspeedの回数だけ繰り返します。すなわち、移動後の座標へと少しずつ動くことになります。
set the rect of cd fld name to round(x1),round(y1),round(x2),round(y2)
16行目では、毎回ごとの座標データへフィールドをセットします。x1、y1、x2、y2の値は小数点がでている可能性がありますから、それぞれの値にはroundをかけておきます。
makeハンドラに、移動後のrect座標、名前、スピードを引数として与えるだけで、このハンドラは使うことができます。実際に動かしてみると、かなりのインパクトを与えるものとなるはずです。
|