24h購物| | PChome| 登入
2006-01-04 21:14:27| 人氣35| 回應0 | 上一篇 | 下一篇

游戲設計理論5:游戲引擎

推薦 0 收藏 0 轉貼0 訂閱站台

1、游戲引擎

  早想寫一點游戲設計的文章與大家交流,一是經驗的問題,二是公司正在緊張的游戲制作期,實 在抽不出多少時間,一直沒有動手,今天忽然頭腦發熱,寫了一段,以后準備陸續寫一些游戲創意,策 劃,制作,流程管理,和制作工具等方面的文章供大家參考。
   
  我們的游戲設計經驗主要是冒險游戲和角色扮演游戲,但我們設計游戲工具時盡量適應其余題 材,不過是否可行未經檢驗。 寫這篇文章的意圖一是想為游戲界做點事,拋磚引玉吧,另外是公司正在尋找志同道合的戰友, 我寫一點文章交一交朋友,許多東西僅僅是我們的經驗,不一定很好。參考而已吧
  
  游戲設計工具包括游戲編輯工具和游戲引擎兩塊;
  
  編輯工具:交互編輯游戲數據,生成游戲引擎所需的數據文件,包括以下幾個功能塊: 圖像編輯,場景編輯,物品編輯,動畫編輯,人物編輯,事件編輯等,具體介紹在以后的 文章介紹。
  
  先從游戲引擎說起。
  語言:VC5。0
  操作系統:WIN95
  圖像引擎IRECT X 5。0
  支持游戲風格:各種類型和視角以及多層次的冒險游戲和角色扮演游戲


  整個游戲引擎包括以下功能塊:

  資源管理:圖像庫CIMGLIB,聲音庫CSOUNDLIB,通過編輯工具形成的資源文件來定義,每種資源 包括定義管理和一些操作接口。圖像庫圖"像包括多種格式(BMP,GIF。AVI,FLC等)以及他形成的內存 格式定義,子圖定義(每一張圖片包括許多小圖,需定義它的小圖位置,當然可以自動生成),游戲需 要的特殊定義,比如行走,身體性質,中心定位點,觸發區,可以根據自己的要求擴充各種性質定義。 圖像最好允許圖像組合定義。聲音庫包括WAV和 MID的定義和再現。 資源由IMGLIB。DAT和 SOUNGIMG。DAT定義,調試版本中最好不要將資源打包,而是指向正常的 文件名,發行版本中再打包,這樣修改和不同工作人員協調容易一些,否則最好有一個自己的資源 管理器。我們在調試版本中數據文件采用文本描述格式。許多數據可以手工編寫而不需要專門的 編輯工具。
  
  資源管理對象還包括內存管理,比如設置時間閥釋放長期不用的資源。

  聲音管理:CSOUND,包括Creat(),Sound(char *fileName。。。),SetPos(),等,DirectSound有一 些函數,我們要做的是封裝簡化,減少對外的接口。

  窗口系統:接管標準窗口系統,一個完善的游戲引擎最好有一個自己的界面系統,至于簡單還是 復雜根據自己情況具體分析,一個具備基本功能的界面系統1000行程序就可以對付下來,需要窗口 系統的原因是一般的圖像引擎不支持標準窗口,二是可以便于移植到別的操作系統。在我們的游戲 引擎中,游戲只是窗口系統的一種特殊控件(CWINGMCTR),因此可以實現多窗口游戲等特殊要求。

  CWINGMCTR是一種特殊控件,通過他來控制游戲。包括控制和顯示。

  圖像引擎:所使用的圖像引擎的管理,我們使用的是DirectX,包括Creat(),CreatSurface(), OutToScr(),Bilt()等對外接口;他不是游戲的重點,我們盡量將圖像引擎細節封裝起來。

  圖像管理:這是處理圖像的中心,一般處理游戲顯示喜歡以某種圖像引擎為中心來設計,我覺得 最好設計自己的對象來封裝別人的圖像引擎,這樣不會因某引擎而受限制,移植也比較容易,我們雖 然使用的DIRECT X ,但實際上對外的接口是一種CPICPAGE的界面,他不但包括DIRECT X 的surface, 也包括標準的位圖,AVI界面,GIF動畫界面,以及自定義的格式,他將各種類型的圖像統一起來,對外 使用統一操作,比如DRAWTEXT,BILT,LINE等標準圖形圖像操作,以及擴充的ALPHA通道,透明度等操 作。為了減少內存的需求,特別是16M高彩,不要將全部圖像使用DIRECT X的表面,對一些刷新不多的 圖像,比如背景,可以使用標準256色位圖,甚至一種GIF表面,需要時再解壓,我們還使用一種單色位 圖用來從背景中摳圖,比如一所場景中一棵巨大的樹,只要不是動畫,我們可以用單色摳圖的形式從 背景中扣除來作為另外一層,這樣我們可以大大降低圖像的內存需求。因此采用全部手繪(或3D場景), 而不是小圖拼貼的場景成為可能。通過各種手段可以節約60%的內存需求。

  CPICPAGE可以通過TimeTrace()以及多線程來改寫內容,比如AVI的改變。
  
  游戲控制:這部分包括顯示和控制,由CGAME->CGAMEPAGE->CGMOBJ對象組成,CGAME是總控對象, 包括許多CGAMEPAGE游戲頁,CGAMEPAGE是一個具有連續場景的游戲片斷,有點類似于游戲的一關, CGAMEPAGE由一系列CGMOBJ組成,CGMOBJ是游戲的基本對象,由他繼承出地圖,物體,物品,人物,武器, 動畫,觸發器,多媒體按鈕等特殊游戲對象,這是一個根據游戲要求不斷豐富和改寫的部分,對外的 接口是:SendDraw(),Draw(),TimeTrace(),AcceptMsg(),SendNetMsg(),AcceptNetMsg()等,他是通 過CWINGMCTR來調用,每種對象有許多控制參數,對象之間允許通訊,以及有自己的生長死亡發展的 控制,盡量做到對象與外界減少直接接口,通過消息實現交流。
 
  對象分為兩類:景色對象和活動對象, 景色對象定義了組成場景的元素,包括背景和前景兩層,可以是由整個圖片組成或由RPG常用的 圖片拼貼法的組成,它的特點只作為背景或前景,活動物是在他們的之間活動,一般定義后不做改變, 也不做控制,由于支持圖像界面多格式,所以我們可以方便地使用AVI或 GIF動畫作為背景來增加場 景的效果和真實性。景色還包括了行走性質定義,我們采用的是8x8為一單元,每個單元定義了一種 性質,比如平地,草地,障礙物等。
  
  活動對象是在背景和前景之間活動,他們之間有相互的位置關系,前后關系隨著位置改變會不斷 改變,因此他在所屬的CGAMEPAGE中次序是動態的。對象的關系一般是由Y軸定義,由于要支持斜視角和 復雜的地形結構,光靠Y軸是不夠的,我們引入了地基線的概念,通過在地基線之上還是之下來判斷前 后關系,地基線的定義在圖像定義中描述。活動對象有復雜的參數,可以接受外界消息,可以有自己的 各種反應。我們在引擎中使用了一種描述語言來描述他們的反應,比如對鼠標擊打,人物經過等產生 參數改變,發聲,對話等的回應。描述語言將作為專門的一章來介紹。 游戲顯示過程是這樣的, 在每次刷新期時窗口的游戲控件調用他所屬的游戲頁 CGAMEPAGE->SendDraw(); 游戲頁將要顯示的對象按前后次序送往窗口,同時注明此對象是否改變,窗口分析改寫的區 域,調用每個對象的Draw()接口來刷新活動的區域,為了增加速度,并不是顯示所有的區域,而是只改 寫活動區域,因此我們設計了一個CCLIP的對象來管理刷新定義,它的原理是將表面分為16*16的單元, 最終顯示時計算出優化后的多個剪切區域。整個窗口系統和每個游戲控件擁有自己的CCLIP對象。另 外一項增加速度的方案是游戲控件擁有一個比顯示窗大兩倍的顯示頁,這樣場景滾動時只要將顯示 位置改變即可 ,不用刷新所有區域。 游戲控制的過程是這樣的:AcceptMsg()來接受各種消息調用腳本來改變自己參數和狀態并影響 別的對象,另外每次時鐘來時,調用每個對象的TimeTrace()來改變狀態,比如動畫改變,運動軌跡改變, 觀察周圍的對象做出反應等。

  系統控制模塊:對系統的參數做出反應。不同的題材控制不一樣,比如即時戰略等。只要改寫這部 分以及擴充游戲對象,引擎便能支持不同的題材。至于人工智能,智能行走,只是對象的方法,比較簡 單,只是需要時間。 游戲控制部分比較復雜,每一種游戲對象都有許多控制的細節,在這篇文章里不做具體描述,以后 再說吧。
  
  最后一個是網絡模塊:我們正在開發的是國內第一個圖形化MUD游戲,網絡是它的核心部分,介紹 網絡的內容很多,需專門文章。我們使用的不是DirectPlay,使用的是WinSoct,考慮的是UNIX作為服務 器的需求。網絡要解決的難點是安全,同步和數據壓縮,這里要用到許多技巧。
  
  游戲是通過數據文件來定義:

  數據文件格式:數據文件包括資源定義文件和游戲定義,界面定義文件,文件的數據格式我們采用 的是文本形式,類似于WEB的文本,這樣的好處一是版本升級容易處理,二是可以減少前期對編輯工具的 功能要求,因為我們可以用文字編輯器處理大部分數據,然后有時間再設計一個強大的工具比較現實, 當然,最終提供給用戶的是處理后的數據文件。他中間有一個轉換模塊。

  游戲的運行流程描述(不是真正的過程,按DOS格式描述):
  CreatGameWindow();//初始化window窗口
  CreatDraw(hWnd); //初始化圖像引擎
  CreatSound();//初始化聲音引擎
  CreatAvi()//初始化AVI引擎
  CreatNet();//初始化網絡引擎
  LoadGameData();//讀取游戲定義數據,包括資源定義文件和游戲定義,界面定義
  While(1)
  {
  WINTraceMsg();//處理系統消息,比如鼠標,鍵盤等
  GameTimeTarce();//處理活動的游戲頁的時間反應
  WinPaint();//刷新游戲顯示
  OutToScr();
  }

  我們這里介紹的是單線程結構,許多部分可以用多線來加快游戲速度,但結構是一樣的,就不多介紹了。
  游戲引擎的系統分析是游戲設計技術方面的成功關鍵,是最容易走彎路的部分,希望我們的文 章能給大家一點啟發,由于今天的游戲趨向于多類型綜合,設計引擎時一定不要拘泥于某一單項題材, 我們在策劃這套引擎時要求他支持的游戲非常廣,甚至支持多媒體設計,這套引擎只要擴充或改寫參 數管理以及游戲對象,便能支持各種風格的2D類游戲。將來我們要做的是一套可以交互設計各種游戲 的開發平臺,當然不是<<游戲工廠>>似的玩具。

台長: Kato
人氣(35) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文