提供: Japanese Scratch-Wiki

このきじは ひらがなのページがありません。ごめんなさい。編集者向け:作成する
斥力 とは、磁石のN極とN極のように、物体同士が反発して退け合う力のことである。 この記事では、斥力をScratchで表現する方法2つ紹介する。
Warning メモ: ここで紹介するスクリプトを利用するときは、自分のプロジェクトにあわせて数値などを変更する必要がある。


シンプルに動かす

この方法では、次のようにスプライトの向きと歩数を指定して、相手と近づいたときに遠ざかる方向に移動している。ごく基本的な方法だが、目的によっては十分な効果を得ることができる。

@greenFlag が押されたとき::events hat
x座標を (0) 、y座標を (-1) にする
ずっと 
  もし <([スプライト2 v] までの距離) < [50]> なら 
    [スプライト2 v] へ向ける
    ((向き) - (180)) 度に向ける
    (10) 歩動かす
    もし端に着いたら、跳ね返る
  end
end

このスクリプトの例は、こちらで確認できる。

速度を利用する

次のスクリプトをスプライト1に入力すると、スプライト2に近づいたとき相手と逆向きに動くようになる。スプライト2にも同様のスクリプトを適用すると、お互いが反発しあっているように見える。先ほどの方法よりもコードが複雑だが、より滑らかに移動するメリットがある。

Warning メモ: 動作を試すため、片方のスプライトをキーボードやマウスで動かせるようにしておくとよい。
@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

このスクリプトの例は、こちらで確認できる。


関連項目