[プログラミング] スクリプトを利用したAlgodooでの色々なギミックの作り方(2)

プログラミング

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) の間を上下します。

コメント

タイトルとURLをコピーしました