2007年12月21日 星期五

啥SL—【Event—Sensor】

  Sensor指的就是偵測感應,這個Event我最常拿來應用自動門和機器人。

  Sensor有兩種Event:
  意思就是當有感應時會啟動sensor當沒有感應時會啟動no_sensor
  
  這兩個Event須要利用以下兩種方法來啟動:

  
sensorno_sensor兩個Event也可以利用llSensorRemove來移除,減少程式負擔。

  而
llSensorllSensorRepeat的不同處就在於llSensorRepeat多傳一個參數,就是rate,意思就是幾秒Sensor一次。也就是說llSensor只會呼喊一次,llSensorRepeat則會一直按照頻率喊叫。

  現在來解釋一下每個參數的意義:
  • name:偵測感應到的物件或使用者名稱
  • id:偵測感應到的物件或使用者的key值
  • type:限定感應到的是哪種類型的東西,參數如下表格:
    Constant Value Searches for
    AGENT 1 agents (users)
    ACTIVE 2
    physical objects that are moving or objects containing an active[1] script
    PASSIVE 4
    non-scripted or script is inactive[2] AND non-physical or, if physical, not moving
    SCRIPTED 8 objects containing an active[3] scrip

    這裡翻譯一下,AGENT只會感應到使用者;ACTIVE是只會感應到會移動的物件(包括有使用者對一物件編輯時產生了移動也會感應到);PASSIVE是感應不會動的物件;SCRIPTED是只要該物件有程式碼且他又會動,就會被感應,也就是說該物件沒程式碼,就算你編輯時進行上下移動也沒反應。
  • range:是感應的距離,也就是半徑。
  • arc:感應的角度,你可以用PI來表示,PI等於180度,而在這裡就等於是全部範圍,也就是360度,因為他這數字的意思是兩邊180度做感應。
  • rate:剛提到過了,就是更新頻率,以秒為單位。
  而啟動的sensor這個Event內有個參數可以接收,就是上面的total,這和touch一樣,統記數量用的,不過比touch還好用,就是統記瞬間偵測感應到的物件數量(當然要先符合條件,比如是使用者或物件或在幾公尺以內之類的)。 

  現在來放一下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");
}
}

 
  由於llSensorllSensorRepeat用法類似,所以只用後者當範例。這個程式碼會每秒鐘感應10m範圍內的使用者(AGENT),而我限制一定要感測到一名叫"shortlin Yue"的使用者,如果有感應到,就會說他感應到的人數,一般來講應該是1,除非有兩個玩家都叫shortlin Yue,不過這應該不可能發生。而如果沒感應到的話,他會說"no_sensor"。

  如果,你想要知道你感應到的玩家是誰?你可以利用Detected相關程式……這之後會特別說明(記得放連結)。

  基本上,這個Seonsor有個缺點,就是他只會以X軸來當基準點,要是你特別想感應某個以Y軸或Z軸為主的角度,你得把物件轉個方向……有點像最近殺戮都市最新幾回有一個人一直拿著會發射死亡光線的人頭攻擊敵人那樣,如圖:
殺戮都市的故事挺特別的

  嗯……所以,你知道我又想到了什麼了嗎?沒錯!就是白眼!
  利用Sensor可以做出火影忍者日向寧次的白眼效果!

白眼也是有死角的!所以arc的設定千不能設為PI呀!!

沒有留言: