2007年12月28日 星期五

啥SL—【Teleport(傳送)】


  TelePort的功能其實沒有想像地那麼簡單,說要傳送就直接用一個method直接可以傳送,他的原理是很奇怪的。原理是先讓使用者坐在某個地方,然後讓他站起來。所以在Second Life,往往會把Sit On here這個Pie Mwnu上的字改為"Teleport",因此有時候字沒有更改的時候,按Sit On Here也可以傳送。

  所以他是利用llSitTarget(vector offset, rotation rot)llAvatarOnSitTarget()llUnSit(key id)changed Event這四個做搭配。

  除了以上連結的範例,我自己也有寫一個範例程式如下:

vector color = <0,1,1>; // set float text color to blue
string staticText = "Teleport to ground !!";
default
{
state_entry()
{
llSetText(staticText, color, 2.0);
llSetSitText("Teleport"); // change "sit" option to "Teleport"
llSitTarget(<0.0,>, ZERO_ROTATION); // needed for llAvatarOnSitTarget to work

if(llAvatarOnSitTarget() != NULL_KEY) // if someone is sitting
llUnSit(llAvatarOnSitTarget()); // unsit him
}
changed(integer change)
{
if (change & CHANGED_LINK)
{ // if a link change occurs (sit or unsit)
llResetScript();
}
}
}

  簡單來講,就是先讓使用者坐在某物件時,利用llSitTarget讓他坐到一個相對位置(就是離這物件多遠的位置,也就是修改vector),至於rotation就是更改使用者坐下時的角度,而之後因為坐下時啟動了changed event,所以整個程式Reset一次,因為Reset一次後他會跑一次state_entry,他測到有人坐在上面,所以他就用llUnsit讓使用者站起來,所以整體看起來很像是用傳送的。

  其實我的寫法是有點怪的,因為這是為了測試我想法對不對的程式碼,所以要是能的話請直接參考連結內的範例程式。

  要注意的是,利用這種方法有可能會因為你的顯示卡不夠力或網路lag導致你有時候好像傳送到異空間一樣(如圖)。

沒有留言: