;
Thyme実例集
【Physical】PhunスレPart7【Sandbox】のスレッドより、質問で出た
Thymeのスクリプト集です。
衝突時に自分自身を消去する
e.this.airFrictionMult = NaN;
あるいは
density=1e-12;
衝突で透明な円が発生し、その中心にペンをつけるスクリプト
Scene.addCircle{ radius:=0.1; collideSet:=2; color:=[0.05 , 0.05 , 0.05 , 0.0]; pos:=e.pos; };
Scene.addPen{ size:=0.15; color:=[0.05,0.05,0.05,1.0]; pos:=e.pos; }
- 円を追加「半径0.1、衝突判定B、色は透明、発生位置は衝突位置」
- ペンを追加「半径0.75、黒っぽい色、発生位置は衝突位置」
と記述してある。
適時パラメータを調節して使えばOK
円の発生位置とペンの発生位置を揃えておくと、ぴったり真ん中にくっつく
ただし、発生直後の円の挙動を乱すとズレたりちゃんとくっつかない
ペンを円の半径に対して大きくしすぎると背景や後ろにある物体についちゃう
衝突すると自分を衝突判定Bにする
e.this.collideSet = 2;
衝突すると相手を衝突判定B+NSCにする
e.other.collideSet = 2;
heteroCollide=true;
ぶつけた相手の空気抵抗100
e.other.airfrctionMult := 100;
衝突した相手を水に変える
e.other.liquify;
大きさを指定して四角を発生させる
Scene.addBox({Size := [1, 1]; collideSet := 64; restitution := 1; density := 100; pos := e.pos});
この例では、大きさ1m×1m、衝突判定G、反発の度合い1、密度100の四角が、衝突地点に発生する。
配列の1要素のみを書き換える
例えば、4つの要素を持つ配列hogeの3番目の要素を0にしたい場合、
hoge(2) = 0;
とはできないので、
hoge = [hoge(0), hoge(1), 0, hoge(3)];
とするしかない。
触った相手のイモータル設定を解除する
e.other.immortal = false;
2つのオブジェクトを出す
Scene.addBox{Size := [1, 1]};
Scene.addBox{Size := [2, 2]};
衝突すると引力が200になる
e.this.attracion=200;
F2キーを押すたびに Scene.my.x に1を加算
F11(AlgodooではF10)でコンソール開いて、下記を入力。
Scene.my.x := 0
Keys.bind( "f2", { Scene.my.x = Scene.my.x + 1 } )
キー入力で物体の空気抵抗を変える
F11(AlgodooではF10)でコンソール開いて、下記を入力。
Keys.bind("1", {Scene.my.x = 100})
Keys.bind("2", {Scene.my.x = 1})
そして、物体のスクリプトメニューを開いてAirFrictionMultのところに
{Scene.my.x}
と書いておく。
衝突するごとにimmortal属性を切り替える
e.this.immortal = ! e.this.immortal;
三項演算子を使った別解。
controllerAcc==1 ?{
controllerAcc=0;immortal=false
}:{
controllerAcc=1;immortal=true
}
3度傾いたBoxを出す
Scene.addBox{angle := math.pi / 180 * 3};
つまり、angleは弧度法(ラジアン)で指定する。
ズームをキーで操作する方法
以下2行を背景の空の部分にコピペ
Keys.bind("shift i",{Scene.Camera.zoom = Scene.Camera.zoom * 2 ^ 0.5});
Keys.bind("shift o",{Scene.Camera.zoom = Scene.Camera.zoom / 2 ^ 0.5});
[Shift]+[I] でズーム
[Shift]+[O] でズームアウト
("shift o"の部分を"o"にすると、[Shift]キーを押さなくても良い反面、[Ctrl]+[O]を押した時にもズームアウトしてしまう。)
ズームイン/ズームアウトするときに画面の中央が徐々にマウスカーソルの位置に近づく
Keys.bind("shift i",{Scene.Camera.zoom = Scene.Camera.zoom * 2 ^ 0.5; Scene.Camera.pan = (Scene.Camera.pan + App.mousePos) / 2; });
Keys.bind("shift o",{Scene.Camera.zoom = Scene.Camera.zoom / 2 ^ 0.5; Scene.Camera.pan = (Scene.Camera.pan + App.mousePos) / 2; });
wキーでカメラを右に10m動かす
Keys.bind("w",{Scene.Camera.pan=Scene.Camera.pan+[10,0]});
最終更新:2016年10月06日 12:40