Hatena::Groupfatalemployeetraining

資材部の懲りない面々・あれこれブログ

「間違った社員教育」製品版委託頒布中!

2010-11-24

ギヤ出し入れ

ランディングギヤの出し入れアニメーションさせるのを作ってみました。


こんなスレッド用の関数を組みました。

90度回すだけじゃなく、ちょっと上に引き込むところがポイント。そうしないと機体内に隠せない。

function gear_down_animation(label) // 引数:脚に割り当てたラベル
{
	float t = 2.0; // 脚を出すのにかけたい時間[s]
	float drx = -90.0/(t*60.0);
	float dy  = -0.05 /(t*60.0);
	rel_rot(label,90.0,0.0,0.0,TRUE);
	move(label,0,0.05,0,TRUE);
	for(i=0;i<t*60;i++){
		system();
		rel_rot(label,drx,0.0,0.0,TRUE);
		move(label,0,dy,0,TRUE);
	}
	exit();
}
function gear_up_animation(label) // 引数:脚に割り当てたラベル
{
	float t = 2.0; // 脚をしまうのにかけたい時間[s]
	float drx = 90.0/(t*60.0);
	float dy  = 0.05 /(t*60.0);
	for(i=0;i<t*60;i++){
		system();
		rel_rot(label,drx,0.0,0.0,TRUE);
		move(label,0,dy,0,TRUE);
	}
	release_object(label);
	exit();
}

使うときは、

出したいとき:

(前略)
	put_gear(LABEL_PLAYER);
	set_label(LABEL_PLAYER, 5, LABEL_GEAR); // 車輪にラベル割り振る
	create_thread(gear_down_animation, LABEL_GEAR);
(後略)

出てるやつをしまいたいとき:

(前略)
	put_gear(LABEL_PLAYER);
	set_label(LABEL_PLAYER, 5, LABEL_GEAR); // 車輪にラベル割り振る
	create_thread(gear_up_animation, LABEL_GEAR);
(後略)

とかします。

これ、さっそく作ってるやつの1面に組み込んで、離陸時に脚をしまうように改造。

ついでに着陸ごっこのスクリプト組もうとしたけど、STALL処理に勝てない。く。これは後日再挑戦してやる。

花火をあげるのも楽じゃない

タイトルは昔々ベーマガに載ってたPC-8001用の素敵な読者投稿プログラムから。作者様のお名前は失念してしまいましたが、幼少の折にかなり楽しませていただきました。

…えー、さて。もろもろあって、RaidersSphere3rd上で花火を作ってみることになったわけです。

ちょっと前にやった作業なんですが、日記につけてなかったので。

どうするよ。ということでいろいろWEBを見たわけです。


「花火 3Dシミュレーション」とかのキーワードで検索すると、四散する星を、ある初速を持つ質点が重力と空気中の粘性抵抗を受けながら落下する運動として取り扱うのが妥当のようです。

んで…打ち上げ花火1発にはだいたい何個の星が入ってるのよ?という話になって。RaidersSphereEngine上でやる場合、ユニットの挙動の制御はラベル単位で扱うわけですから、ラベル数上限の制約を受けますので、確認がいるわけです。

で…気が付いたら、正多面体とフラードームとか調べていた。

…頂点数42!?さらに増えると92!???…まんまやるのは無理だな…

あきらめかけたんですが、絡め手を思いついたのでやってみました。

おお、なんからしくできそうだぞ。と。

星の配置が不自然なので、もうちょっと工夫してみようとしたのが最初の動画。

まじめなシミュレーションから見たら結構インチキしてるんですが、かなりラシイですよね。スクリプトまだ仮も仮のテスト版なので、リファインして仕上げていくことにします。