這兩個Event須要利用以下兩種方法來啟動:
- llSensor(string name, key id, integer type, float range, float arc)
- llSensorRepeat(string name, key id, integer type, float range, float arc, float rate)
sensor和no_sensor兩個Event也可以利用llSensorRemove來移除,減少程式負擔。
而llSensor與llSensorRepeat的不同處就在於llSensorRepeat多傳一個參數,就是rate,意思就是幾秒Sensor一次。也就是說llSensor只會呼喊一次,llSensorRepeat則會一直按照頻率喊叫。
現在來解釋一下每個參數的意義:
- name:偵測感應到的物件或使用者名稱
- id:偵測感應到的物件或使用者的key值
- type:限定感應到的是哪種類型的東西,參數如下表格:
Constant Value Searches for AGENT 1 agents (users) ACTIVE 2 PASSIVE 4 non-scripted or script is inactive[2] AND non-physical or, if physical, not movingSCRIPTED 8 objects containing an active[3] scrip
這裡翻譯一下,AGENT只會感應到使用者;ACTIVE是只會感應到會移動的物件(包括有使用者對一物件編輯時產生了移動也會感應到);PASSIVE是感應不會動的物件;SCRIPTED是只要該物件有程式碼且他又會動,就會被感應,也就是說該物件沒程式碼,就算你編輯時進行上下移動也沒反應。 - range:是感應的距離,也就是半徑。
- arc:感應的角度,你可以用PI來表示,PI等於180度,而在這裡就等於是全部範圍,也就是360度,因為他這數字的意思是兩邊180度做感應。
- rate:剛提到過了,就是更新頻率,以秒為單位。
現在來放一下Sensor的範例程式:
default
{
state_entry()
{
llSensorRepeat("shortlin Yue", NULL_KEY,AGENT, 10, PI,1);
}
sensor(integer total)
{
llSay(0,(string)total);
}
no_sensor()
{
llSay(0,"no_sensor");
}
}
由於llSensor與llSensorRepeat用法類似,所以只用後者當範例。這個程式碼會每秒鐘感應10m範圍內的使用者(AGENT),而我限制一定要感測到一名叫"shortlin Yue"的使用者,如果有感應到,就會說他感應到的人數,一般來講應該是1,除非有兩個玩家都叫shortlin Yue,不過這應該不可能發生。而如果沒感應到的話,他會說"no_sensor"。
如果,你想要知道你感應到的玩家是誰?你可以利用Detected相關程式……這之後會特別說明(記得放連結)。
基本上,這個Seonsor有個缺點,就是他只會以X軸來當基準點,要是你特別想感應某個以Y軸或Z軸為主的角度,你得把物件轉個方向……有點像最近殺戮都市最新幾回有一個人一直拿著會發射死亡光線的人頭攻擊敵人那樣,如圖:
嗯……所以,你知道我又想到了什麼了嗎?沒錯!就是白眼!
利用Sensor可以做出火影忍者中日向寧次的白眼效果!
沒有留言:
張貼留言