HyperCard tribute

フィールドをぐにゃりと移動


 フィールドを所定の位置へ指定したサイズへと、リアルタイムに移動・変化させるハンドラを作ってみます。この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座標、名前、スピードを引数として与えるだけで、このハンドラは使うことができます。実際に動かしてみると、かなりのインパクトを与えるものとなるはずです。