Algodooは2D物理シミュレータとして様々なことを表現することができます。
本記事ではAlgodooで実現できる各ギミックの作り方を備忘としてまとめておきます。
こちらの記事の続きとして書いています。
物体Aが物体Bにぶつかったら弾を発射する
ここでは、物体A(サークル)が、物体B(正方形)にぶつかったら、物体Bから弾(サークル)を発射するようにスクリプトを書いています。
まずは、物体A(サークル)を作成したら、右クリックから「スクリプトメニュー」を選択します。
materialName変数が “”(空文字)になっていますので、”target”と入力しておきます。

次に、物体B(正方形)を作成します。
物体Bは動かないようにしておきたいと思いますので、右クリックから「図形アクション」→「背景に密着」を選択します。
さらに右クリックから「スクリプトメニュー」を選択し、onCollide変数に以下のコードを入力します。
(e)=>{
e.other.materialname == "target" ? {
e.other.timeToLive = 1;
scene.addCircle({
pos := [e.pos(0) + 0.5, e.pos(1) - 0.5];
radius := 0.2;
colorhsva := [rand.uniform01 * 360, 1.0, 1.0, 1.0];
vel := [20, 20]
})
} : {}
}

シミュレーションを開始すると、物体Aが物体Bにぶつかると弾が発射します。
物体Aは1秒後に消すようにしていますので、その間は何度か物体Bにぶつかり、ぶつかる度に弾が発射されます。
物体Aを上下に動かす
物体を一定間隔で上下に動かす場合、右クリックから「スクリプトメニュー」を選択し、postStep変数に以下のコードを入力します。
(e)=>{
pos = [pos(0), math.sin(sim.time) * 10 + 5]
}
sin関数を用いることで上下に動かすことができます。
こちらのコードの場合、x軸は固定された状態で、y軸が -5(-10+5) から 15(10+5) の間を上下します。
sim.timeはシステム上の時間を返す関数です。
「sim.time * 2」にすると速く上下することになりますし、「sim.time * 0.5」にすることで上下を遅くすることもできます。
物体Aを左右に動かす
物体を上下に動かすのと同様に、左右に動かす場合は、y軸を固定してx軸を動かしてあげることで実現できます。
右クリックから「スクリプトメニュー」を選択し、postStep変数に以下のコードを入力します。
(e)=>{
pos = [math.sin(sim.time) * 10 + 5, pos(1)]
}
こちらのコードの場合、y軸は固定された状態で、x軸が -5(-10+5) から 15(10+5) の間を上下します。
コメント