提供: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
このスクリプトの例は、こちらで確認できる。