物件被Link起來的模樣
Link Message可以把訊息傳給本身自己其他的Script與其他Link物件的Script。而圖中黃色為parent藍色皆為child。Link Message的優點是傳的速度快,且不會被竊聽,但缺點就是要把兩物件Link起來,距離不能太遠,我算過大約只能4.346m的距離。不過這不代表所有被link的物件一定要這樣的距離,像以下圖中這樣,只要最近的兩塊物件沒有超過這個距離,就可以Link,雖然還是有限制,但在Second Life裡看到很多房子的製作其實都是被Link起來的。
那Link Message到底是如何使用的?只要使用llMessageLinked,就會啟動指定物件的link_message這個event。
llMessageLinked的格式如下:
llMessageLinked(integer linknum, integer num, string str, key id)
linknum指的是要傳給訊息的物件的種類代號。代號有以下五種:
在這邊翻譯一下,LINK_ROOT指的是要傳給parent。LINK_SET是要傳給所有被的物件。LINK_ALL_OTHERS是要傳給除了自己以外的物件。LINK_ALL_CHILDREN是要傳給所有的child。LINK_THIS則是傳給自己本身其他的Script。
num是要傳給物件屬於數字的訊息。
str是要傳給物件屬於字串的訊息。
id是要傳給物件屬於key的訊息。
llMessageLinked使用範例如下:
llMessageLinked(LINK_THIS,1,"ohohohoh!!",NULL_KEY);
這樣的用法就是我要傳給自己物件其他的script數字為1字串為ohohohoh!!key值為NULL_KEY的訊息。
而啟動的link_message這個event要寫入的參數格式是(integer linknum, integer num, string str, key id),使用範例如下:
{
if(str=="It is from A Object")
{
llSay(0,"A");
}
if(str=="ohohohoh!!" && num==1)
{
llSay(0,"You're dead!!!");
}
}
意思就是收到字串為It is from A Object就會說A,收到ohohohoh!!(喔喔喔喔!!)就會說You're dead!!!(你已經死了!!!)。
Link Message的整個使用範例如下:
當A物件和B物件被Link起來的時候,A是parent,B是child,而A除了有A1程式碼外還有A2。A物件的A1程式碼如下:
而A物件的A2程式碼如下:
因為A1有啟動了傳給其他Script的llMessageLinked,所以A2的 link_message event就一定會被啟動,而他if去判斷接收的num是不是我們要的,簡單來講,就是所謂的過濾。然後A物件就會很感傷地說"Btother!!!!!"
而B物件的程式碼如下:
integer LM_SEND_TO_CHILD=88;
default
{
link_message(integer linknum, integer num, string str, key id)
{
if(num== LM_SEND_TO_CHILD)
{
llSay(0,"No!!!!");
}
}
}
因為A物件的A1是傳訊息給其他的child的,所以身為child的B物件就一定啟動link_message這個event然後再經由判斷正確後,B物件會像是路克天行者般地大喊:不!!!!因為A物件說了句"I am your father!!!"
OK,以上就是利用Link Message傳遞資訊的方式,下一篇將會提到我們如何利用HTTPRequest來和外部溝通。
那Link Message到底是如何使用的?只要使用llMessageLinked,就會啟動指定物件的link_message這個event。
llMessageLinked的格式如下:
llMessageLinked(integer linknum, integer num, string str, key id)
linknum指的是要傳給訊息的物件的種類代號。代號有以下五種:
Constant | Value | Description |
LINK_ROOT | 1 | root prim in linked set (but not in a single prim, which is 0) |
LINK_SET | -1 | all prims in object |
LINK_ALL_OTHERS | -2 | all other prims in object besides prim function is in |
LINK_ALL_CHILDREN | -3 | all child prims in object |
LINK_THIS | -4 | prim script is in |
在這邊翻譯一下,LINK_ROOT指的是要傳給parent。LINK_SET是要傳給所有被的物件。LINK_ALL_OTHERS是要傳給除了自己以外的物件。LINK_ALL_CHILDREN是要傳給所有的child。LINK_THIS則是傳給自己本身其他的Script。
num是要傳給物件屬於數字的訊息。
str是要傳給物件屬於字串的訊息。
id是要傳給物件屬於key的訊息。
llMessageLinked使用範例如下:
llMessageLinked(LINK_THIS,1,"ohohohoh!!",NULL_KEY);
這樣的用法就是我要傳給自己物件其他的script數字為1字串為ohohohoh!!key值為NULL_KEY的訊息。
而啟動的link_message這個event要寫入的參數格式是(integer linknum, integer num, string str, key id),使用範例如下:
integer linknum, integer num, string str, key id)
link_message(
{
if(str=="It is from A Object")
{
llSay(0,"A");
}
if(str=="ohohohoh!!" && num==1)
{
llSay(0,"You're dead!!!");
}
}
意思就是收到字串為It is from A Object就會說A,收到ohohohoh!!(喔喔喔喔!!)就會說You're dead!!!(你已經死了!!!)。
Link Message的整個使用範例如下:
當A物件和B物件被Link起來的時候,A是parent,B是child,而A除了有A1程式碼外還有A2。A物件的A1程式碼如下:
integer LM_SEND_TO_CHILD=88;//和之前的Chat一樣,給定常數方便管理
integer LM_SEND_TO_OTHER_SCRIPT=2;
default
{
state_entry()
{
llMessageLinked(LINK_ALL_CHILDREN,LM_SEND_TO_CHILD,"I am your father!!!",NULL_KEY);
llMessageLinked(LINK_THIS,LM_SEND_TO_OTHER_SCRIPT,"I am your brother!!",NULL_KEY);
}
}
而A物件的A2程式碼如下:
integer LM_SEND_TO_OTHER_SCRIPT=2;
default
{
link_message(integer linknum, integer num, string str, key id)
{
if(num== LM_SEND_TO_OTHER_SCRIPT)
{
llSay(0,"Btother!!!!!");
}
}
}
因為A1有啟動了傳給其他Script的llMessageLinked,所以A2的 link_message event就一定會被啟動,而他if去判斷接收的num是不是我們要的,簡單來講,就是所謂的過濾。然後A物件就會很感傷地說"Btother!!!!!"
而B物件的程式碼如下:
integer LM_SEND_TO_CHILD=88;
default
{
link_message(integer linknum, integer num, string str, key id)
{
if(num== LM_SEND_TO_CHILD)
{
llSay(0,"No!!!!");
}
}
}
因為A物件的A1是傳訊息給其他的child的,所以身為child的B物件就一定啟動link_message這個event然後再經由判斷正確後,B物件會像是路克天行者般地大喊:不!!!!因為A物件說了句"I am your father!!!"
OK,以上就是利用Link Message傳遞資訊的方式,下一篇將會提到我們如何利用HTTPRequest來和外部溝通。
沒有留言:
張貼留言