提供:Japanese Scratch-Wiki
このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する
ここでは、スプライトを目標の地点に近づくにつれて減速させるように移動させるためのプログラムを説明する。
スプライトを滑らかに移動させるプログラム
警告:
ここでは「スプライトを滑らかに移動させる」とは、ある地点から目標の地点までスプライトを、目標の地点に近づくにつれて減速させるように移動させるということである。
<<<(X座標)>((目標の地点のX座標)-(2))> かつ <(X座標)<((目標の地点のX座標)+(2))>>かつ<<(Y座標)>((目標の地点のY座標)-(2))> かつ <(Y座標)<((目標の地点の座標)+(2))>>>まで繰り返す X座標を(((X座標)-(目標の地点のX座標))/(-4))ずつ変える//これらの「-4」の数が小さいほど遅く移動する Y座標を(((Y座標)-(目標の地点のY座標))/(-4))ずつ変える end X座標を(目標の地点のX座標)にする Y座標を(目標の地点の座標)にする//わずかに差が生じるために、最後に調整する //「~まで繰り返す」は上の「-4」に当てはまる数に応じて「10回繰り返す」にしてもよい。
プログラムの解説
このプログラムの仕組みは、スプライトをX座標、Y座標それぞれの目標座標と現在の座標の差を負の数で割った数、つまり目標との距離に比例した距離の分、動かすというものである。(動作の例↓)[1]
真偽ブロックの箇所の+2や-2の意味は、誤差約±2の範囲内までスプライトが移動したら、このスクリプトを完了させることである。
この数を入れなかった場合(この数を0にする、つまり無意味にする)には、このプログラムが実行し終わるまでに長い時間がかかってしまう。
なので時間の短縮化をするために誤差を付けている。なお、プログラムが実行し終わるまでの時間を気にしないのであれば、
<<(X座標)>((目標の地点のX座標)-(2))> かつ <(X座標)<((目標の地点のX座標)+(2))>>かつ<<(Y座標)>((目標の地点のY座標)-(2))> かつ <(Y座標)<((目標の地点の座標)+(2))>>
の箇所を、
<<(X座標)=(目標の地点のX座標)>かつ<(Y座標)=(目標の地点のY座標)>>
としても良い。
そして、
X座標を(((X座標)-(目標の地点のX座標))/(-4))ずつ変える
の部分の「-4」が負の数である理由は、正の数にしてしまうと、本来の動きの向き[1]と逆になるばかりか、目標座標と現在の座標の差がより大きくなってしまうからである。また、小数にしても正の数では正しく動作しない。
プログラムの応用
<<(向き)>((目標の向き)-(2))> かつ <(向き)<((目標の向き)+(2))>>まで繰り返す @turnRight (((向き)-(目標の向き))/(-4))度回す end
一例としてこのようなプログラムを組むことで、向きを滑らかに変え、180度以上回転することができる。
- ↑ スプライトの向きではなく、現在の座標から目標の座標へ向かって移動するときの見かけの向きである。