提供: Japanese Scratch-Wiki
このきじは ひらがなでよめません。ごめんなさい。編集者向け:作成する
斥力(せきりょく) とは、磁石のN極とN極のように、物体同士が反発して退け合う力のことである。 この記事では、斥力をScratchで表現する方法2つ紹介する。
メモ:
ここで紹介するスクリプトを利用するときは、自分のプロジェクトにあわせて数値などを変更する必要がある。
シンプルに動かす
この方法では、次のようにスプライトの向きと歩数を指定して、相手と近づいたときに遠ざかる方向に移動している。ごく基本的な方法だが、目的によっては十分な効果を得ることができる。
@greenFlag が押されたとき::events hat
x座標を (0) 、y座標を (-1) にする
ずっと
もし <([スプライト2 v] までの距離) < [50]> なら
[スプライト2 v] へ向ける
((向き) - (180)) 度に向ける
(10) 歩動かす
もし端に着いたら、跳ね返る
end
end
このスクリプトの例は、こちらで確認できる。
速度を利用する
次のスクリプトをスプライト1に入力すると、スプライト2に近づいたとき相手と逆向きに動くようになる。スプライト2にも同様のスクリプトを適用すると、お互いが反発しあっているように見える。先ほどの方法よりもコードが複雑だが、より滑らかに移動するメリットがある。
メモ:
動作を試すため、片方のスプライトをキーボードやマウスで動かせるようにしておくとよい。
@greenFlag が押されたとき::events hat
x座標を (0) 、y座標を (0) にする
[y速度 v] を (0) にする
[x速度 v] を (0) にする
ずっと
もし <([絶対値 v]\((([x座標 v]\([スプライト1 v]\)) - ([x座標 v]\([スプライト2 v]\)))\)) < [50]> なら
もし <([x座標 v]\([スプライト2 v]\)) > (x座標)> なら
[x速度 v] を (-0.1) ずつ変える
end
もし <([x座標 v]\([スプライト2 v]\)) < (x座標)> なら
[x速度 v] を (0.1) ずつ変える
end
end
もし <([絶対値 v]\((([y座標 v]\([スプライト1 v]\)) - ([y座標 v]\([スプライト2 v]\)))\)) < [50]> なら
もし <([y座標 v]\([スプライト2 v]\)) > (y座標)> なら
[y速度 v] を (-0.1) ずつ変える
end
もし <([y座標 v]\([スプライト2 v]\)) < (y座標)> なら
[y速度 v] を (0.1) ずつ変える
end
end
end
@greenFlag が押されたとき::events hat
ずっと
もし端に着いたら、跳ね返る
x座標を (x速度) ずつ変える
y座標を (y速度) ずつ変える
[x速度 v] を ((0.98) * (x速度)) にする // 速度を徐々に減らしていく。
[y速度 v] を ((0.98) * (y速度)) にする
end
このスクリプトの例は、こちらで確認できる。