2007年12月29日 星期六

啥SL—【給初心者的話……我們的專題主程式介紹】

  我們的專題是以LSL為主PHP與MySQL為輔,分工方式就是我林家民和賴永昌寫LSL,Second Life3D美工與企劃還是我,PHP和MySQL全權交給林泰昇,而PHP和MySQL不是我擅長的,所以這邊當然只提LSL,因此這個blog很有可能不會介紹到Second Life提供的網頁相關api(像是我們網站的地圖)。

  在介紹前,我先放上我們網站的連結(http://sl.weco.net/)、專題文件與LSL程式碼(還未整理),有興趣可以去看和打包下載。

  而因為我們所有的物件與程式都有share with group,所以只要是weco的學生都可以更改,只要別改爛就好……
 
  首先,在SL開發有個很重要的重點,就是物件與物件傳遞訊息的方式,我把這些整理起來成以下三篇文章:
  【訊息傳遞—前言與Chat】
  【訊息傳遞—Link Message】
  【訊息傳遞—HTTPRequest】

  了解完資訊是怎溝通後,我一一分批介紹必備的Event功能。

  因為我們是做第一人稱射擊遊戲,所以一定要有個封閉的場地,因此要讓玩家到達我們封閉的場地,有個很重要的功能,就是傳送(Teleport),因此可以參考以下這篇文章:
  【Teleport(傳送)】

  而在玩我們的遊戲時,必須要觸碰遊戲選單,因此一定要處理觸碰(Touch)的Event,所以請看以下這篇文章:
  【Event—Touch】

  而因為我們的遊戲是屬於單人的,所以有時間上的限制,故,一定要有Timer這個Event,關於這個Event請看這篇文章:
  【Event—Timer】

  那,我們的怪物是如何感應追蹤玩家與感受到傷害的呢?

  我們是利用Seonsor去感應,再利用一個非常簡單的程式碼llApplyImpulse(vector force, integer local),這程式會讓被設定為Physical的物件開始推動,force就是力量的方向,而local是傳入布林值,當TRUE時他是以該物件坐標系統為主,FALSE的話就是以Second Life整個坐標系統為主,老實說我也沒比較過這兩個的不同,不太好講,畢竟這程式碼是直接參考wiki上的程式的,所以整個程式必須要搭配Sensor,寫出這樣的程式碼:

sensor(integer total)
{

llSetStatus(STATUS_PHYSICS,TRUE);
//object moves physically

llApplyImpulse(-llVecNorm(llGetPos() - llDetectedPos(0)) * forward_para * llGetMass(), FALSE);
//move to target

}//end state searching sensor(integer total)

  只要寫下以上程式碼,那物件就會以很好玩地方式來追你唷。
  Sensor的用法可參考以下這篇文章:
  
Event—Sensor】

  至於感受傷害,當然是讓物件感到碰撞(Collision)的event:
  【Event—Collision】

  至於怪物的特效,其中火魘(Fire Mare)的招式就是利用的分子系統,分子系統可參考這篇文章:
  【ParticleSystem(分子系統)】

  其實機器人的程式有很多,可以參考紅色wiki這個條目。大至上是分成兩種,一種是非物理性質的移動(如我們怪物的瞬移,就是用llSetPos(vector pos))和物理性質的移動(如上面有用到的)。

  最後玩家不是要穿上裝備嗎?那穿上裝備或戴上能量砲都要有反應,前者是加防禦,後者是要發射武器,這兩個都有用到attach event,可參考:
  【Event—Attach】

  由於發射武器是要進入第一人稱模式,那這方面的程式碼,我們是參考了LSL紅色wiki這個條目

  我們的專題差不多就是這樣了,如果到了最後要寫文件的時候,千萬別參考我們的目錄,因為我們寫了200頁,導致那裡做得有一點隨便。而那200頁有2/3是程式碼,只是因為我每個程式碼都有流程圖,所以才想放上,加上程式碼又沒縮排,所以才搞到200多頁= ="因此不見得厚就是好……我只是單純地想紀念而已XD~

相關連結:
啥SL—【給初心者的話……前言與應用】
啥SL—【給初心者的話……專題開發可能的方向……】

沒有留言: