2008年07月02日

飛行艇をつくったのですが


海にフロートで浮かんで飛行機として飛べるものは作れるのでしょうか?
飛行機と船のスクリプトはなんとなくわかるのですが
どう組み合わせてもうまくいきません^^;

他の考え方などあれば是非教えてください



Posted by Shun Sewell  at 23:42 │Comments(5)TrackBack(0)スクリプト関連

この記事へのトラックバックURL

http://oshiete.slmame.com/t292596

この記事へのコメント
思い付きで、かつ今試せない環境のため、これでうまくいくかどうかわかりませんが、、、
もしかすると切り替えが重い等の理由で全く使いものにならないかもしれませんのでご了承ください。

1.飛行用スクリプトを関数化→flight()、船用スクリプトも関数化→sail()
2.timer()イベントハンドラで、以下を実施する。
- 定期的に自分の座標を確認しllWater()で得られる海抜と比較し着水しているかどうかを判定。
- 判定結果、着水しているならばsail()をコール。
3.touchイベントハンドラ(他の手段でも良い)で、以下の処理を実施する。
- 数メートル上空に強制物理移動する。
- flight()をコール。
 
着水判定がcollisionまたはland_collisionイベントハンドラでできれば良いのですが、できるかどうかちょっとわかりません。
できるならば、2.の部分はtimer()でなくこちらを使ったほうが良いと思います。
Posted by asa Soyer at 2008年07月03日 13:22
mew3さん、こんにちは。

asa Soyerさんが、厳密な時間のもとでの「長押し」を回答していますので、もっとアバウトで簡単な方法を書きます。

適当な変数を定義してカウンターとして使いtouchイベントの回数をチェックします。

具体的には、

// グローバル変数定義
integer counter;

// 諸々の処理は省略

// 初期値を正の整数としデクリメントして0と比較してもいいのですが、分かりやすくするためにカウントアップ方式)

touch_start(integer num_detected)
{
counter = 0;
}

touch(integer num_detected)
{
counter ++;
if(counter == 60) // 試してみたら、60カウントするのに4~5秒長押しでした
{
llDialog(パラメーター省略);
}
}

これで「長押し」は可能ですが、このままでは問題が出るでしょう。
というのは、押している人を考慮していないということです。
誰かが押している最中に、別の人が押したらcounterはリセットされますし(初期値設定を別の場所でやればよいわけですが)、同じ人が押し続けているのかチェックしていないからです。

その辺は、イベントのパラメーターのnum_detectedと、llDetectedKey関数と、そのキーの保持の仕方を考えれば出来ますよ。
Posted by ささぴ at 2008年07月03日 14:10
あぁ・・・、コメントするところを間違ってしまいました。
申し訳ございません。
Posted by ささぴ at 2008年07月03日 14:11
間違いついでにコメントすると、どこかに「浮き輪」のスクリプトがあるはずです。水面で浮いて、浮上することもできるはずです。頑張って検索してみてください。
Posted by ささぴ at 2008年07月03日 14:17
参考になりました。

頑張って作りたいと思いますー

ありがとうございました^^
Posted by Shun Sewell at 2008年07月03日 18:38