Posts Tagged ‘HGE’

Python使用HGE引擎

八月 25th, 2009

大家肯定都知道在Python下面寫2D遊戲有個眾所階知的選擇就是pygame,雖然它簡單好寫,對於簡單的遊戲來說已經足夠,但是他有一個致命的缺點,就是速度太慢了,在pygame的背後是SDL,用純軟體畫圖的函式庫,既然為純軟體繪圖,遇上旋轉、半透明等等需求,更顯得吃力和不切實際,所以該怎麼辦才好呢?

答案是用Haaf’s Game Engine,它是一款用DirectX做為backend的Open source遊戲函式庫,我在先前的文章裡已經有做簡單的介紹,就不再重覆,那這函式庫和Python又有什麼關聯呢? 他是用C++寫的,Python沒辦法用,正因為這樣,我一直一來想幫他寫一個python的binding,我一直想如果Python也能用HGE寫起來一定很開心,我試著找了一下有沒有已經存在這樣的專案,有找到一個,但是居然是在萬惡的GNU授權下的,讓我百思不得其解,那專案的作者到底在想什麼? 想讓大家寫Open source的Game嗎? 我們都知道GNU是大名頂頂的病毒授權,任何程式使用了用GNU的函式庫都會被感染,代表你的主程式一樣得變成GNU的開源授權,我個人非常討厭打著自由名義但是卻有強烈的強迫性質的GNU授權,況且HGE的授權是非常寬鬆的 zlib/libpng License,實在想不透為什麼一個binding可以用超嚴格的GNU,不過那是那作者的自由,我也管不著,在不能接受那惡心的授權,加上我看了一下他的專案似乎好像也沒有很完整的進度,於是我還是決定自己開了一個新的專案

Python HGE

在這樣的情況下,我前些天抽空開了一個新的Open source專案: Python-HGE,把一些最核心的程式碼都用boost.python包裝給Python使用,最核心的部份完成度很高,剩下的需要我在未來有空慢慢補上,License是MIT,如果你問我為什麼選MIT,我想答案應該是商業用途一樣也可以,不像GNU那種假腥腥的自由,還有一個重點就是,我覺得麻省理工這名字聽起來很酷,讓我想起每次在Discovery看到的東西

效能問題

我照著原本HGE的Tutorial7的程式寫了一個Python的版本,這個範例的目的就是在展示HGE的效能,純C++的版本速度當然是很快,而Python的版本FPS掉了不少,一開始讓我覺得有點失望,讓我開始懷疑如果效能掉很多的話,那用Python寫HGE還有價值嗎? 後來仔細思考了一下,對於一般的2D遊戲來說,要像這demo整畫面跑來跑去的圖片加透明效果的情況實在不多,就算有也很難到這樣上千張的圖片,再者我都還沒進行最佳化、跑profile等等,而且雖說FPS掉不少,但是那是和C++數百的FPS比起來,在60以上其實都是可以接受的,加上我測試的這台電腦已經有點年代,對現代的電腦和GUP來說情況只會更好,在如此的考量之下,Python HGE還是有搞頭的

python版的tutorial 7截圖

t7

這個demo可以在這裡下載

目前狀況

目前雖然核心部份已經高度完成,不過我還沒有把編出來的pyd釋放的打算,如果想嘗鮮的話可以直接從那個demo裡面找pyd出來用,又或著自己check out原始碼進行編譯

參與開發

如果有興趣的話,歡迎參與專案的開發,如同我上面所提到的,我用的是boost.python,一款基於C++的python binding函式庫,如果你熟悉boost.python的話當然是最好,就算沒有也沒關系,因為其實大部份工作都是剪下貼上之類的,可以參考我已經寫好的部份,有些函數回傳例如指標之類的東西需要特別處理,除此之外都只是很簡單無腦工作

Haaf’s Game Engine : 硬體支援加速的2D遊戲引擎

一月 10th, 2009

長久以來我一直想寫一個2D遊戲引擎,每次我都自己重頭做起,甚至每個pixel都自己用迴圈進行copy和半透明的運算等等工作,但是要寫一個引擎談何容易,不光是有很多細節要處理,設計得好壞又是另一回事,我以前重寫過六次的線上遊戲都是架構在自己寫的引擎上,做為學習確實學到了不少東西,但是就實際應用來看既浪費時間又難以在第一次就做到滿意的地步,使用別人造好的輪子當然是較好的選擇,但是在之前一直沒有見到什麼令人比較喜愛的引擎,SDL也同樣是用軟體繪圖,速度不夠快,要做特效也做不太來,光是旋轉縮放等問題就令人頭大,我只是想寫遊戲,有一天我發現了符合我想法的2D引擎,HGE(Haaf’s Game Engine)

它的銘言是:

Fast and convenient development of high-quality small 2D games without knowing much about technology.

在我研究了一下之後,我發現它正是我心目中的2D引擎,它隱藏了很多煩人的細節,真正做到只是想寫遊戲這樣的要求,它使用Direct3D來畫2D圖形,使用硬體當然速度比軟體畫快得多,它非常簡單好用,支援常見的圖檔案格式,它有粒子系統、資源打包等等功能,總而言之,基本該有的支援它幾乎都有了,而且都很簡單易用,還有最令人高興的是,它的文件非常的清楚、完備,它在之前似乎是商業軟體,後來才變成免費的Open source project,我想因為這樣它的文件才會如此完整,它使用zlib/libpng License,可以使用在商業用途,這也很合我胃口,不會像GNU License病毒那樣,聽到商業兩字就得說掰掰,以做為2D遊戲的引擎而言,這樣的引擎可以說是我心目中的引擎,我今天隨手寫了一個小程式,只是算試玩性質,根本還不能表現它的實力,在我看來要用它來寫東方系列那樣的射擊遊戲也很夠用,有點手癢想寫一個來玩玩看

HGE引擎demo

HGE引擎demo

下載 : HGE引擎demo小程式

當然這對HGE來說只是小菜一盤,請看官網的demo,很酷的demo,令人印相深刻

HGE project wizard template for Code::Blocks

一月 10th, 2009

I am learning HGE (Haaf’s Game Engine) these days. It is troublesome to set up all include and library directory stuff every time you want to write an application based on HGE. For this reason I spent some time to learn how to create a Code::Blocks project wizard template, and finally finish it. It is quite simple to install the HGE project wizard template into Code::Blocks. The only step you have to do is unzip the zip file to the location you install Code::Blocks and restart Code::Blocks. If you have installed other nonstandard templates, those templates might disappear from the project list, because Code::Blocks use 『share\CodeBlocks\templates\wizard\config.script』 to list all templates, and you overwrite it. To solve that problem, you can merge config.script manually. It is not too difficult to understand that file if you are going to learn how to write a game with C or C++ :D

Download : HGE project wizard template for codeblocks

Code::Blocks的HGE專案樣版

一月 10th, 2009

最近開始研就HGE (Haaf’s Game Engine),為了能方便開新專案寫HGE的程式,我特地研究了一下如何製作Code::Blocks的Wizard template,有個樣版每次開新專案就很方便,不用每次都要設定link之類的麻煩事情,我將它上傳,有興趣的就抓回去使用吧,安裝方法很簡單,只要解壓縮到Code::Blocks安裝的目錄下即可,如果你有安裝其它Project Wizard template的話,有可能會抓不到,或讓其它安裝的template被蓋掉,因為Code::Blocks是依照share\CodeBlocks\templates\wizard\config.script這個script檔來決定有哪些template,遇到這個問題的話,就請手動合併config.script檔案,內容很簡單,應該看了大概就明白在做什麼的

HGE project wizard template for codeblocks