moving_start
moving_start()
この
イベントはオブジェクト(物理および非物理を問わず)が移動を開始したり(位置を変えたり、オブジェクトが装備されたときも含みます)、またはSIMに入った時に発生します。
moving_end()イベントと比較してください。
Example:
vector start;
default {
moving_start() {
start = llGetPos();
llSleep(2.0);
// this prevents the end event
// from getting triggered earlier than we want
}
moving_end() {
llSay(0, "You moved me " +
(string)llVecDist(start, llGetPos()) +
" meters.");
}
}
Q: 私がオブジェクトの回転を変えるとき、moving_startは引き起こされますか?
A: いいえ、moving_start()とmoving_end()は、位置の変化によって引き起こされるだけです。直接の回転に関してイベントを発生させる方法が、ありません。 そのためには
timer()イベントを使う必要があります。これに対する「例外」としてはオブジェクトが装備品であった場合にはあなたのアバターがターンするときにmoving_startとmoving_endが発生します。
なぜですか?
一見それは回転に見えますが、実はそれらは移動しているのです。
つまり、アバターの回転の中心で回っているのではなく、それを中心とする弧の中で回転しているので、それらの位置は変化しているとみなされるべきものだからです。
Q:別のSIMから入った時だけ、moving_start()イベントを発生させる方法はありますか?
A: いいえ。
代替としてベストな方法は以下のようなイベント自体ををフィルターにかけることです。
string gCurrentSim; // current simulator name
default {
moving_end(){
// sim_name is so we only
//need to call llGetRegionName once.
string sim_name = llGetRegionName();
if (sim_name != gCurrentSim) {
// if we're here, it means we've just
// entered a new sim.
llOwnerSay("Entered " + sim_name + ".");
gCurrentSim = sim_name;
}
}
}
A2:代わりに
changedイベントのCHANGED_REGION定数を利用することもできます。
changed(integer change) {
if (change & CHANGED_REGION) {
//region change code here
}
}
最終更新:2008年10月01日 00:36