Home > 遊戲編程 > 2008年回顧和展望

2008年回顧和展望

迎接家人的來臨後,慢慢適應了新生活。每天還是找到一點時間,看書、寫引擎、和看動畫。很久沒更新這 Blog,就先說說這個月的引擎進展、今年的工作、和明年的展望吧。

本月引擎進展

自從十月中旬開始使用敏捷方法,45 個 stories 中完成了 26 個,平均每個 story 花上了一、兩個晚上。以下簡介一下完成的部份。

MilStudio

我們花了比較多的時間在 MilStudio 這個工具上。雖然它目前還是非常簡陋,但進展還算不錯。

  • Script Editor: 由 Textbox 作為文字編輯器升級至 ScintillaNET,支持 Lua syntax highlighting、搜尋、取代、跳行等等。ScintillaNET 還支持一些將來做 IDE 很有用的功能,例如在 debug 時加入箭頭和斷點等符號。
  • Game Window: 渲染遊戲內容。現在加入了簡單的 Camera Navigation 和 Picking。
  • Entity Window: 以 TreeView 顯示 Entity 層階,也可以選取 Entity。因為之前在物件刪除時會 crash,Refactor 了一次,使 Mil 的資料和 MilStudio 的顯示同步。
  • Property Window: 顯示和修改目前選取的 Entity 的屬性。

目前可以用 MilStudio 編寫一些簡單的測試,但由於仍欠缺 World 的 Persistency,MilStudio 並沒有實際創建和編輯Entity 的能力。

輸入

設計並實現了一個極簡 (minimalist) 的跨平台輸入設備 API:

如同之前的圖形 API 設計,實然上編譯 WindowsControllerManager 時,它是名命為 ControllerManager,而使用者(例如腳本裡)是直接調用這個類別的。

ControllerManager::Update() 是用來更新所有輸入設備 (Controller) 的狀態。每個 Controller 又固定數目的狀態,而且保留一組是更新前的狀態。所謂狀態,可以是一個鍵是否按下、或滑鼠的一個軸的值,全部都以 float 表達。

這樣表達輸入設備的狀態的好處是 API 非常簡單,跨平台容易。而不同平台需要不同的輸入對映等邏輯就會放到腳本裡處理。以下是一個測試程式,可用方向鍵控制一個 Entity 移動 (狀態的 stateIndex 是平台相關的,現在 hard-code 在腳本裡):

Input.ControllerManager_Instance():Update()

local keyboard = Input.ControllerManager_Instance():GetController(0)	
local up = keyboard:GetCurrentState(200) == 1
local down = keyboard:GetCurrentState(208) == 1
local left = keyboard:GetCurrentState(203) == 1
local right = keyboard:GetCurrentState(205) == 1

local direction = Math.Vector3(0, 0, 0)

if up and not down then
	direction.z = -1.0;
elseif not up and down then
	direction.z = 1.0;
end

if left and not right then
	direction.x = -1.0;
elseif not left and right then
	direction.x = 1.0;
end

self.box:SetLocalTransform(Math.Matrix44_Translate(direction * 0.1)
    * self.box:GetLocalTransform())

以下是測試輸入的 C# 程式,可測試 Windows 上不同 Controller 的狀態:

物理

開始了最基本的 Bullet 物理引擎整合。只支持加入剛體 (Rigid Body) 和長方碰撞體 (Box Collider)。剛體是一個 Component,可選擇性地加到 Entity 上。

今年回顧

在家中開發引擎已經十一個月了。我本意還是想做遊戲 Prototype,但進度還是稍慢。

從三月起建立 SVN 至今的十個月裡,只有 62 個 commits,當中更有五個月是 commit 數量是零。箇中原因,包括家庭、玩遊戲、看動畫等等……但一個比較實際的原因,是現在的我經常有太多的故慮,不太敢寫代碼。經常左思右想,一些應該很簡單的東西也長時間無進展。自從十一月中旬採用了敏捷方法,及加入了成員,開發立即加速,不足兩個月便有 34 個 commits

我認為這個變化的原因是因為溝通。和別人溝通,包括口頭上的和文件的交流,都會把思路變得清晰。時間並不是這個項目的限制,連續不斷的挑戰和成功感才是項目的推動力。現在的我有時候會想

如果某一個晚上只有很少的時間,不希望斷斷續續地做一個 story ,花十來分鐘寫幾個 unit test 也不錯。

剛想到某個模組的一些東西,用 Google Docs 寫下來,給 xlyao 看看吧。

明年展望

第一件事是要相討並決定好下一個 milestone。我希望怎樣簡陋的圖形也好,也要做一些遊戲性出來。有了清晰目標,應該會更加努力。

近期目標是完成今個月我們決定了要做的一個資料/檔案管理系統,暫名為 Mil Universe Database (MUD)。必須有了這系統才可以把不同的資源連結起來。遲些會撰寫關於這個系統的事。

之後的目標可能放在以下幾方面:

  1. World 的永續性
  2. Entity 和腳本的綁定 (Binding)
  3. 在 MilStudio 建立 Entity 的使用者介面
  4. Mesh、Texture、Material等的資源管理

中期目標應該會是做一些有「可觀性」的遊戲性示範,希望在遊戲性和視覺上做到一些新東西。最後,

2009年,期望會做得比今年好,也希望大家和家人有一個豐盛快樂的一年。

Comments:3

Percy 09-01-01 (四) 0:13

Happy New Year!
MilStudio 非常吸引
希望佢快高長大 :D

半路 09-01-07 (三) 10:00

ScintillaNET 是能夠做為 .NET 的 GUI 元件,直接使用在 Winform 之上嗎?真是個很不錯的開源專案哪。

MilStudio 看起來相當迷人啊!不知何時能夠放出試用版本?也期待能夠見到一些敏捷方法的開發流程心得分享。 :D

祝新的一年裡,一切都好。 :)

Milo 09-01-11 (日) 20:21

回 Percy:
希望將來你的公司可以用得著。

回半路:
是啊,ScintillaNET 很容易整合。不過比較缺乏文檔,有時要先看 Scinitilla 文檔,再估計 ScintillaNET 裡如何使用。真的不行時就要看 ScintillaNET 代碼了。不過 Scintilla 功能真的很強。

我會努力的~ 祝今年大家一切順利。 ^_^

Comment Form
Remember personal info

Trackbacks:0

Trackback URL for this entry
http://miloyip.seezone.net/wp-trackback.php?p=73
Listed below are links to weblogs that reference
2008年回顧和展望 from Milo的遊戲開發

Home > 遊戲編程 > 2008年回顧和展望

Search
Feeds
Meta

Return to page top