大貓共和國

Meow

初探Shattered Ruby(2) - Follow the First Tutorial

如果你玩過rails,你大概一秒鐘就可以知道shatter所產生的每個目錄的功用。不知道也沒關係,一開始我們需要注意的目錄其實很少:

  • app:整個遊戲的主程式都在這裡面
  • config:一些設定檔
  • script:一些ruby的script,runner可以啟動遊戲、generate可以幫助產生程式碼等等…
接下來就請跟著官網wiki的Your first move這篇教學做吧。
ruby script/generate state observation
與rails一樣,這個框架有內建一些generator幫助產生程式碼。他的概念大概是整個遊戲會在不同的state間轉換(state machine),每個state會有不同的input/output。現在我們產生了一個名為observation的state。但現在還不能執行,因為還沒有指定初始狀態。請照wiki上的步驟修改config/environment.rb (哇咧,連這個也要取和rails一樣的名字)

執行ruby script/runner吧,程式順利啟動了,雖然因為我們沒在場景上放上任何物件,所以畫面是一片全黑的,但至少應該可以順利執行了。

接下來,跟著教學做吧… ruby script/generate actor dirty_ruby
我們可以看到程式又自動產生了一堆檔案。跟著Wiki上的教學修改ObservationState物件,我們可以看到這是一個Domain Specific Language應用的例證…code真是有夠簡單的 :) 注意因為最新版的generator有問題,可能會當機,請參閱wiki的說明從範例source code中得到正確的mesh檔。

接下來我就不詳細講,跟著wiki跑完這個簡單的tutorial並沒有問題。你應該可以得到一個旋轉的紅寶石,並且可以控制他左右移動。



注意一點:我覺得這裡的View並不是MVC架構中的View,反而比較像是Data Model(定義了物件的mesh和行為)。如果你本來懂MVC架構,這可能是比較容易混淆的地方。

初探Shattered Ruby(1) - 簡介&安裝&Getting Start

之前在OGRE language binding中曾經稍微提到過Shattered Ruby,實在是對他滿好奇的,所以今天就抓下來玩了一下。還滿有趣的,但不是每件事都那麼美好:

  • 先說優點,玩起來真的很像在用Ruby on Rails寫網頁,操作有夠簡單,很少的程式碼就可以寫出一個小遊戲。
  • Shattered Ruby已經快要半年沒有更新了,根據官方blog的說法,開發人員有其他事情在忙著。
  • 有些功能在最新版本(0.4)反而無法使用,作者在wiki上說很快就會修正,但很久沒動靜了。另外,Wiki上很多tutorial及example並不能在最新版本上跑,document is out of date.
  • Lack of support,開發人員不知道什麼時候才會回來,搞不好一輩子都不會開發了,除非你有自己去延續開發的心理準備,否則…XD
  • Python-OGRE裡至少有提供了ODE, OgreNewt這些物理引擎的介面。如果在Shattered Ruby做碰撞判定,你不是要自己寫native binding,不然就是要拿慢到要死的Ruby去計算? (我是Ruby的擁護者,但Ruby的長處絕不在物理運算 XD)
目前看起來,做做小遊戲可以,拿來開發中大型遊戲還差的遠。所以我大概分成三篇稍微介紹一下Shattered Ruby就會結束了。

Shattered Ruby的安裝其實很簡單。首先你要先裝好Ruby及RubyGems (RubyGems是Ruby的套件管理系統)。在Windows系統下最方便的方法就是直接安裝Ruby One-click Installer就好了。

安裝好之後,進入命令提示字元,輸入
gem i -y shattered
他就會自動幫你下載/安裝好。台灣最近連RubyForge的速度好像變慢了些,下載的過程中包括了OGRE, mingw, DirectX的DLL檔,所以可能需要比較久的時間,請耐心等候。

OK…Let’s getting start

先建立一個空目錄,然後進到命令提示字元,切換到該目錄下…如:

cd <br />mkdir temp
cd temp
shattered mygame

最後一行是幫你建立一個遊戲專案目錄,讓我們看看裡面有什麼

C:\temp>dir mygame
磁碟區 C 中的磁碟沒有標籤。
磁碟區序號: 1CD9-4BA7

C:\temp\mygame 的目錄

2007/02/16 下午 04:57 <DIR> .
2007/02/16 下午 04:57 <DIR> ..
2007/02/16 下午 05:01 <DIR> app
2007/02/16 下午 04:59 <DIR> config
2007/02/16 下午 04:57 <DIR> doc
2007/02/16 下午 04:57 <DIR> log
2007/02/16 下午 04:57 454 Rakefile
2007/02/16 下午 04:57 905 README
2007/02/16 下午 04:57 <DIR> script
2007/02/16 下午 04:57 <DIR> test
2007/02/16 下午 04:57 <DIR> vendor
2 個檔案 1,359 位元組
9 個目錄 7,678,304,256 位元組可用


有用過Ruby on rails的人應該都看的出來,這架構明顯是抄rails的吧 XD 只是一個用來寫網頁一個用來寫遊戲。

到這裡…簡介與安裝就結束囉。我們下篇繼續

(閒聊)在blogspot貼程式

不知道什麼狀況會造成縮排的空格全部不見 (好像要到撰寫模式才會,但大部份狀況下又都不會)。對於python尤其可怕,這是我唯一一個用過的語言用縮排做blocking的….Orz

OGRE初學筆記–以Python為例 索引篇

原本只是想把筆記整理一下而已,根本沒有想過會寫到那麼詳細…在將近12小時之內打了十篇文章,連我自己都嚇了一跳。

其實我自己也是OGRE初學者,對Python的也是很不熟(我是Ruby的愛用者)。很可能會有錯誤,也請大家幫忙指教。這些筆記和原本的Wiki相比少了很多東西,建議大家還是詳閱Wiki比較好。希望大家有了這些中文筆記,能夠比較快上手一些。

近期應該會再補上OIS輸入、使用py2exe發佈遊戲….今天實在太累了,到此為止囉。

就這樣囉,之前研究一陣子的東西,今天有空一次把他寫出來,超累的….祝大家去死去死節快樂 XD

Python-Ogre Tutorial 4&5

請先閱讀「寫在OGRE Tutorial前面」,本文假設您的目錄配置都和我一樣。
本文參考PyOgre Beginner Tutorial 4, PyOgre Beginner Tutorial 5

為什麼要把這兩個tutorial合起來呢?這兩篇講的是OGRE Input,但是OGRE內建的Input是不被推薦使用的,所以我並不想詳談。

簡單的說,教學四講的是unbuffered input,在迴圈中不斷的去polling有沒有輸入事件發生。教學五講的是buffered input,比較像event-driven的感覺,Listener Pattern有寫過Java的人應該都不陌生。好….Input講完了。

輸入的部份,推薦另外用OISSDL處理。Python-OGRE已經內建了OIS了。

事實上我在Python-OGRE裡根本試不出內建Input怎麼用,SampleFramework裡也是直接使用OIS,所以找不到範例,在forum也找不到討論。但是看到這段程式碼:

if (ogre.OgreVersion[0]+ ogre.OgreVersion[1]) == "12": # ogre 1.2.3 is latest SDK
from Ogre.sf import *
else: # assume it's ogre version 1.3, the CVS version that needs OIS
from Ogre.sf_OIS import *

似乎指出現在(1.4版Ogre)的Python-OGRE已經不能用內建輸入了。

另外請詳閱Wiki,了解什麼是FrameListener。




之後會再弄個OIS輸入處理篇吧,這一系列的文章就到此結束。