ソラマメブログ
プロフィール
ぺんぎん
ぺんぎん
どもっす( ◎v◎ )
ぺんぎんっす。

「ぺんぎんさん」でいいっす。
「ぺんさん」でもOKっすよ。
何だって良いんっすけどね。
[個体名:Naoya Bellic]
(非商用)
読者登録
メールアドレスを入力して登録する事で、このブログの新着エントリーをメールでお届けいたします。解除は→こちら
現在の読者数 1人

2009年04月26日

「サイコロ」と「コイントス」っす

2009-04-25のスクリプターズ・カフェっす。
お題を持っていったっす。
「サイコロ」と「コイントス」についてっす。
どうもぺんぎんっす( ◎v◎ )


やってるのは、
1.サイコロを投げ上げる(サイコロは物理っす)
2.止まったら結果をSay&Die
これだけっす。

問題になってるのは「止まったら」の部分っす。
調べてもらえれば分かるんっすけど、
ピッタリなイベントがないっす。
[速度と角速度が一定値を下回った]という判定をしないとダメっす。

これまで使用していたのはcollisionland_collisionっす。
このイベント内で「止まった」かどうかの判定をしてたっす。
[何かに触れている]かつ[速度と角速度が一定値を下回った]っていう
モロに直接的な表現っす。

問題なのはいつ終わるか分からないってことっす。
何度も何度も判定処理が起こるっす。

ココをもうちょっと、何か・・・こう・・・スマートなやり方はないっすかね?
っと思ったわけっす。


で、っす。
timerを使ったらどう?という話になったっす。
頭の中でのイメージは、

//***********
// グローバル変数
//***********
vector 位置;

//*************
// state default
//*************
default
{
  on_rez(integer start_param)
  {
    llSetTimerEvent(この時間までにcollisionしないとDie);
    位置 = llGetPos();
  }
  collision_start(integer num_detected)
  {
    llSetTimerEvent(0.0);
    state check;
  }
  land_collision_start(vector pos)
  {
    llSetTimerEvent(0.0);
    state check;
  }
  timer()
  {
    llDie();
  }
}
//************
// state check
//************
state check
{
  state_entry()
  {
    llSetTimerEvent(最初の停止判定までの間隔);
  }
  timer()
  {
    if(位置とllGetPosとの距離が一定値以上)
    {
      llDie();
    }

    if(速度と角速度が一定値を下回った)
    {
      結果通知;
      Dieも忘れないで;
    }
    else
    {
      llSetTimerEvent(停止判定の間隔);
    }
  }
}

グローバル変数に位置を持っているのは、
例えば、スカイボックスで投げて、転げ落ちたときのためっす。
ぴゅーっと落ちて、止まるのは地上っすからね。
そもそもSayが届かないっていうことっす。
物理プリムが上空から落ちてくるのも問題っすけど・・・


っていうのをタイニー制作教室を覗きながら妄想してたっす。
たぶんこんな感じっすよね?


同じカテゴリー(スクリプト)の記事画像
位置判定っす
同じカテゴリー(スクリプト)の記事
 久しぶりの新関数っす (2011-04-23 23:19)
 11日(土)のオフィスアワーっす (2010-12-10 23:49)
 C#プロジェクトは凍結みたいっす (2010-07-01 22:35)
 4月24日のスクリプターズ・カフェっす (2010-04-27 19:06)
 潜入!1.38サーバーっす (2010-03-09 22:25)
 風の観測で分かったことっす (2009-08-16 22:11)

Posted by ぺんぎん at 00:41│Comments(0)スクリプト
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。