Category Archives: 遊戲設計

Python使用HGE引擎

大家肯定都知道在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截圖 這個demo可以在這裡下載 目前狀況 目前雖然核心部份已經高度完成,不過我還沒有把編出來的pyd釋放的打算,如果想嘗鮮的話可以直接從那個demo裡面找pyd出來用,又或著自己check out原始碼進行編譯 參與開發 如果有興趣的話,歡迎參與專案的開發,如同我上面所提到的,我用的是boost.python,一款基於C++的python binding函式庫,如果你熟悉boost.python的話當然是最好,就算沒有也沒關系,因為其實大部份工作都是剪下貼上之類的,可以參考我已經寫好的部份,有些函數回傳例如指標之類的東西需要特別處理,除此之外都只是很簡單無腦工作

Posted in C/C++, Python, 中文文章, 分享, 設計, 遊戲設計 | Tagged , , , , , , , , , | 4 Comments

夢想線上聊天室的新成員 腦殘NPC: Dragon

因為Client需要重構要花一些時間,在這期間想說如果都沒變化還挺無趣的,但Client又還不能動,就在伺服器端加了一個無腦亂跑和亂說話的NPC: Dragon 話說這幾天下來還蠻多人進來的,大多是外國人,果然全球的市場就是不一樣,才放上去沒多久下載次數已經是之前程式的幾倍,不過安裝率反而比較低,大概是因為太揚春和有些問題,玩家大多都打英文,來自各個時區,不同年齡,目前看到最小的是一個外國小女孩13歲拿著G1在玩,真是有錢 囧 玩家的反應兩極,有人一進來就說”This is suck”, “I’m out”就跑了,不然就說”This is gay!”, “You look gay”, “every one in this game looks gay”,也有人覺得很有趣,說”This is an awsome idea”, “This is interesting”, “I can’t wait this game to be improved”,或許因為兩極反應拿到3.5顆星 整體看起來Android上的mmorpg或是像這樣的線上聊天室還是有搞頭的,單以台灣市場可能太小,但全球的話就應該夠大足以稱起這遊戲,不過還有很長的路要走,首要的工作就是改進client

Posted in Android, 中文文章, 遊戲, 遊戲設計 | 5 Comments

夢想線上聊天室Beta

終於,第一個可運行的版本出來了,本來這種程式應該要慢慢寫才對,但是臨時決定要衝比賽,玩家端包含伺服器端寫了我三天的程式,程式寫得很髒很亂,有不少小bug,但大至上的運作都是正常的,日後維護可辛苦了,不過至少即時趕出來了 遊戲截圖 進入主畫面後點擊地圖的八個方向就可以移動 未來的目標是做成手機上的MMORPG,不過可能還要很久的時間 下載 透過下載連結或是qrcode:

Posted in Android, 中文文章, 遊戲, 遊戲設計 | Tagged , | 3 Comments

卡卡獸的移動

增加了角色移動的功能,感覺上還蠻順暢的,不過好趕,有種在亂寫的感覺 移動的影片,實做角色移動的部份,因為Webcam是固定焦距,太遠又暴光過 度,所以只能這樣拍,看起來像近視一樣= = 不過感覺上滑動還蠻順暢的 話說,有誰知道哪裡可以找到免費的八個方向角色走路的圖…. 我想要找來測試一下都不知道從何找起 orz 美術白痴的我要畫大概是不太可能

Posted in Android, 中文文章, 遊戲設計 | Tagged , , , | 5 Comments

Android遊戲設計初體驗

今天玩了一下在Android寫game,託以前經驗的福,很容易就上手了,和一般的Game沒有太大的差別,但因為Android所謂的main-thread和main-loop都是用來回應UI用的,因此要更新遊戲的邏輯、畫面,需要另外的Thread,參考Android裡的遊戲範例,很快地就隨便寫出一個還稱不上是Game的小程式來玩,只是簡單地移動貼圖,在模擬器跑慢到暴炸,FPS只有1初頭,根本沒辦法進行debug,而在我的HTC Magic下跑FPS可以到30~40左右,所以要在Android開發遊戲似乎實體的手機是必需的,模擬器平時跑一般的程式都可以慢成誇張的地步了,更何況是不停更新的Game,所以非手機或其它硬體支援不可,除非哪天模擬器效能大改進 雖然這小程式沒什麼大問題,但是有件事情讓我很困擾,就是每隔一點段時間就會發生delay,週期性且不斷地發生,這樣的delay會讓玩家感到不爽,難以進行遊戲,糾~竟~是為什麼會有這週期性的delay,我們…繼續看下去 Delay的兇手 找了一些資料,終於讓我發現這週期性delay的兇手,就是來自於garbage collection的週期性回收垃圾,請看VCR 在Android寫一個簡單的貼圖移動程式,發現會有週期性的delay,原因出在於垃圾回收機制不停地週期性地運作,請看背後LogCat的GC發生的一瞬間,程式的畫面就會delay 而亂丟垃圾的兇手就是…. 我,沒有什麼寫Java經驗的我,new一個物件似乎很輕鬆平常,反正Java有垃圾回收機制,一般寫程式再怎麼丟都有人幫你撿,但是寫Game就是另一回事了,對於寫Game而言,垃圾回收機制是delay的來源,所以在遊戲迴圈內不能有用完即丟的new物件產生,任何物件在遊戲都應該被reference或是重覆利用,不停丟垃圾的下場就是你的遊戲會因為有人一直停下來幫你撿垃圾所以不停的delay 當我移除所有new之後… 我發現delay似乎還是會發生,想了一想,想到了在這背後還有隱含的new會發生,也就是Java的字串其實骨子裡就是new,只是方便的寫法所以不用特別寫出來,在移除了所有使用到暫時字串的地方後,果然圖片的移動就相當順暢 接著 我想寫一個簡單的地圖引擎實作來看看Android的2D貼圖效能如何,如果不幸的很不夠力,可能就得用OpenGL下去畫2D了

Posted in Android, 中文文章, 遊戲設計 | Tagged , , , | 1 Comment

開發wxPython的利器 : PyCrust

一直想做的事 最近我在用wxPython開發某些程式,隨著開發的過程中,難免需要一些直接的測試,改動程式碼來進行測式似乎不是很明智的選擇,即使Python是直譯式的語言,每改一次重新啟動整個程式也是一種浪費,而且狀態每次也會重置,於是我開始想,我是否可以寫一個像Half-Life那樣的一個console整合到我的GUI中,如此一來我就可以在開發時直接進行某些測試,對某些特定的模組操作,如此一來開發的效率可以提升,對於程式而言也會更好除錯,但是雖然寫一個console不是什麼太難的事,但也不是什麼太輕鬆的事,為了早點完成程式,於是我就沒有真的去做 直到某本書的出現 : wxPython in action 當有一天我訂的書: wxPython in action終於來了,這本書要1500元,實在是不便宜,但是我認為卻很值得,我在書中發現我以前一直都沒仔細去注意到的東西,PyCrust,在翻過這章節時我驚訝地發現,這不就是我想做的嗎? 一個控制臺,可以讓我操作、觀察、測試我的GUI,而且整合的方法超簡單,只要一行指令 python pywrap.py main.py 在wx.py的package下的pywarp.py會自動找到app並且將PyCrust整合進去,在我程式中執行的畫面就像這樣 在截圖中我利用pycrust將gui的背景換成了紅色,它不止是一款簡單的GUI,因為他是動態載入模組的name space,和一般IDE不同的是,他的自動完成是動態的,一般的IDE只抓得到靜態的成員,但是即然是動態載入又是在執行中,有什麼成員一清二楚,所以基本上自動完成功能感覺非常地強大,但相對的弱點是對於靜態的部份比較麻煩 它除了可以自動整合到現有的wxPython gui程式中,更可以把裡面各個元件分開來獨立使用 所以它可以幹麻? 對我來說,PyCrust將會是像神兵利器般好用的工具,像是開發遊戲之類需要大量的調校,一個console或是動態的機制是免不了的,而console提供了立即且互動式的環境,有了PyCrust,就等於有了現成的console可以使用,在遊戲的開發過程中,開發者可以利用這個console動態地改變各種參數來觀察反應等等,當然開發遊戲只是其中一個應用的例子,即使在一般的GUI中也會是很好用的工具 順帶一提 wxPython in action真的是難得一見的好書,有別於一般的書,它使用問句來當做標題,但是不會因為這樣而零散雜亂,相反的,你可以很正式地看完一次,也可以很快速地掃過一次,當你需要什麼東西時,那些問句可以幫助你很快地找到你需要的東西,豐富的截圖和圖解更讓人不用費心去猜想到底做出來會是什麼樣子,或是想像到底是如何運作,如果要學wxPython,我覺得這本書真的是非常值得推薦,做為工具書,這本也是必備的一本

Posted in Python, 中文文章, 分享, 遊戲設計 | Tagged , , , | 2 Comments

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

介紹HGE 2D硬體加速的遊戲引擎 Continue reading

Posted in 中文文章, 分享, 遊戲設計 | Tagged , | 3 Comments

Code::Blocks的HGE專案樣版

為了能方便開新專案寫HGE的程式,我特地研究了一下如何製作Code::Blocks的Wizard template Continue reading

Posted in C/C++, 中文文章, 分享, 遊戲設計 | Tagged , | 2 Comments

pygame隨便玩

什麼是pygame? pygame是一款用python寫的遊戲函式庫,基於SDL之上,之前就很想要玩玩看,今天隨便找了一個範例然後隨手亂改一番 心得就是pygame寫起來很順手、很簡單,改天有空的話用它來寫個Game試試 亂寫的demo可以在這裡下載 pygame亂寫的demo 也沒什麼特別的東西,只有會繞著滑鼠旋轉的圖,只要安裝python直譯器和對應版本的pygame就可以執行

Posted in 中文文章, 遊戲設計 | Tagged , , | Comments Off on pygame隨便玩