今天小弟暫時脫離閉關狀態,更新了一下LGame的SVN,更新的文件為:LGame-0.3.3-Beta(20120229).7z
所以特意上博客說一小聲,是因為這次更新小弟偷偷在SVN中增加了LGame-0.3.3的C# Beta版本(支持Windows、XBOX、WP7等環境,如果算上Mono的存在,微調下代碼也能跑Mac(MonoDevelop)、 iOS(MonoTouch)、Android((MonoDroid))等等等等(剛才看了一下,Mono支持的手機很多啊),不過這些需要額外花點 ¥(是Mono收的,不是偶……))。
從今天開始,LGame對外就有C#版了(其實早就有,就是沒發……)。
本來小弟預期在2月發0.3.3正式版,結果有些事耽誤了開發,進度比預計
中的慢。C#版雖然已經構建完畢,但以前許下的RTS模塊還沒寫完(Java版和C#版的都沒寫完,從去年動筆到臨近寫完,到今天幾乎沒再添加代碼,果然
自己不是一般的懶),而原來Java版的例子,除AVG和SRPG的以外,也都尚未移植到C#版本,至于文檔就更別提了|||。所以,小弟本著“虱子多了
不咬,債多了不愁”的無產階級大無畏精神,稍微改變下開發計劃,現階段依舊慢慢在SVN中更新0.3.3的Beta版,正式版等C/C++和HTML5版
本寫完后,連皮帶瓤四版一塊發。
所以今天絕對不算正式發布,小弟只是慢慢走過來,用低沉鬼祟的嗓音悄悄招呼一聲:“增加了C#支持的LGame-0.3.3-Beta已被上傳”。這個,最多算跳票跳一半吧-_-
目前發布到SVN中的只有核心包dll與源碼,以及附帶2500個常用漢字字庫的空項目模板(Hello
World),其它輔助包還得測試下,過兩天調好再補到SVN當中。另外,例子暫時并沒有上傳,小弟準備等補全后一起發SVN(其實照搬Java版的
API就是了,除照顧C#用戶情緒首字母大寫外,真的一樣(要求首字母大寫,首先是保證C#中變量和函數重名時,編譯不報錯的需要。另外還有一個好處,就
是以后寫腳本轉換,將其它語法與C#互換時比較方便,統一處理即可);況且小弟也增加了不少C#仿Java的函數)。
其實,就算大家不用LGame,有想研究C#游戲或引擎開發的,或者有需要將Java代碼移植到C#的,也多少可以參考下小弟上傳的源碼,僅就2D開發而
言,就算目前發的是Beta版,也比看書或借鑒別的什么項目強太多了。希望小弟開頭以后,國內原創的C#游戲和游戲引擎也能多起來,總山寨國外的到底不是
辦法,否則老外真以為中國沒活人了(話說把一些自己都不知道什么意義的代碼照翻過來,真的很無聊,特別某些人還專喜歡照抄冗余的部分,顯得代碼深奧嗎?
喂,這可是C#啊,某些從別的語言帶來的啰嗦語法,能免則免吧……)。
預計4-5月之間小弟會將C/C++版(首個版本只保證支持Windows、Mac、iOS以及PSP運行,其他環境不敢保證,微調下可能能跑,也可能不 行|||不過會陸續擴展,反正是SDL的底子,好辦~(簡化了,只有部分需要的代碼)),還有HTML5版發布,也就是LGame的0.3.3版這時才正 式公開。
PS:Java、C#、C/C++、HTML5(JavaScript)這四種基礎版本搞定后,小弟無論如何也得組團,否則自行發展四種不同語法的版本幾乎不可能,主要是這四者的可運行環境存在重復,反復調試耗時甚巨,個人無法承受~
而后,我會給C/C++版添加額外的語法支持(純解釋器方式,非虛擬機,不過我會讓腳本能編譯成一些足以糊弄蘋果的東西,合理規避審核),初步考慮支持 Java和C#語法(語法特性只準備支持到JDK1.4以及.Net2.0,更高版本特性暫不提供),除此之外,也考慮在Ruby以及Python中再抉 擇其一做語法支持,還沒最后定下(另外有時間的話,小弟還想玩點新鮮的,實驗下多語法混合使用)。估計這些寫完至少得7,8月見,這個版本會是 0.3.4。
接著小弟準備翻回頭來,替Java版增加JavaFX支持,給C#版增加Silverlight支持,這倆貨倒簡單,爭取一個半月搞定(雖然有可能變成
“臨終關懷”)。至此小弟就可以開始寫可視化IDE了,總之盡量簡化開發流程。把上述這些全部做完后,我將順應國內潮流,走最陰險也是最大眾化的一步,廣
招技術水軍強推-_-(話說在我國最大最公開的技術槍文發布“村”,小弟也是認識幾個人的。另外還可以弄些Free的游戲,刷幾個月搞幾百萬幾千萬下載量
之類)……
當然,一些功能擴展與優化,會混雜在這個過程中一起完成。
——————————————————
關于C#版和Java版的三點小差異:
一、屏幕大小
其實小弟以前也提過,C#版與Java版將存在屏幕默認大小的差異。
Java版LGame的屏幕大小默認為480x320(橫屏。話說這個大小省圖,所以定成了這樣),而C#版則為800x480(微軟菜市場強制要求)。 假設都使用默認設置,那么直接移植Java版游戲到C#版時,就需要額外設置MaxScreen大小,才能讓C#版的LGame自動縮放為Java版的屏 幕比例。
比如,我們將Java版本AVG示例的開始界面,毫無設定的直接運行在C#版中,會得到這樣的效果。

因為原始設定是按照480x320跑的,而實際畫面大小卻是800x480,所以肯定會產生出入。
其實只要加入MaxScreen(480,320)這一行設定后,就會變成這樣(從LGame的log數據也能看出差異)。

這時的效果與Java版如出一轍(當然,如果一開始就需要800x480的屏幕,或者希望根據屏幕大小產生效果差異,就什么都不用改了)。
另外,如果有一些屏幕先天不足或大于800x480的游戲需要移植,也可以通過此方法進行自動縮放,這在LGame的所有版本中都通用。
二、手柄支持
C#版在默認條件下,除Windows與WP7外,也可以運行在XBOX之上;不過,XBOX一般卻都使用手柄,而非鼠標或觸屏之類進行游戲,因此在游戲開發時需要額外引入手柄控制。
目前LGame的C#版提供了GamePadListener接口(只有它和PSP版有),其中已包含有全部XBOX游戲手柄的事件監聽,我們只要實現這 個接口,并且通過Screen的AddGamePadListener函數添加相關監聽(監聽可以Add多個),就可以獲得具體的手柄數據,進而操作游戲 了。
三、使用Content項目以外的資源
XNA默認使用管線技術(一種大家都知道怎么解密的混淆器……),將Content項目中的資源編譯為xnb文件供用戶加載。但是,C#默認提供的 Pipeline實現卻并不多,無法滿足全部的資源加載需求(而且用Mono的話,這項功能就廢了。所以個人認為,自行實現Pipeline其實挺沒 用)。因此,為了加載處理一些特殊類型的文件,我們有時將不能使用系統默認生成的xnb(所有能通過ContentManager的Load函數加載的資 源,都是這個后綴,只是系統默認屏蔽后綴罷了),而需要讓資源文件保留原始格式。
這時,我們就要在VS中自行設置資源文件的格式了。而想獲得非xnb格式的資源,需要滿足下列兩個條件。
1、文件不能位于XNA自動生成的Content項目中,否則要么被編譯成xnb格式,要么系統報錯打包失敗。(這意味著,通常我們需要在游戲源碼所在項目,Add一個新Folder)
2、在這個Folder中的資源,必須手動設置屬性下Build Action項為Content或Resource(讀Resource僅限LGame,而且需要已引入 System.Windows.Application支持),并且Copy to output項,不能為Do not copy,否則VS也不會將它們打包進XAP這個WP7應用包(LGame中有個省力的辦法,用LPKUtils混淆全部資源,然后加載單獨lpk包即 可。當然,一個個加也無所謂,畢竟屬性可以批量設置)。
PS:順帶一提,如.spritefont之類文件在生成xnb后,我們就可以把.spritefont這種配置文件刪掉了,以后直接解壓xap把生成的 xnb拿出來用就行(本文再重復一次,xap這貨其實就是個zip),反正真正打包時系統只認xnb文件而完全不需要.spritefont。否則你做中 文字體,一個完整字庫少說得編譯一、二分鐘(兩萬多個漢字,將生成十幾MB的xnb文件,偶都是寫批處理挑字生成,幾MB足矣),純屬浪費時間。
——————————————————————————————————
原本預計明天多寫點東西才發,小弟剛剛卻赫然發現,這個月居然只有29天(一直以為本月有30天)。今天不發就是徹底的跳票,所以先將C#版的核心源碼上
傳了。過兩天例子都移植完時,小弟還會偷偷過來談談更具體的開發事宜(小弟偷偷的來,偷偷的走,打槍的不要,聲張的沒有,其它等“基礎四版”構建完后再
說)。
都說跨平臺是趨勢,其實單純的跨平臺之類真是弱爆了,小弟今年準備嘔血跨語法跨機種跨系統外加跨平臺,額外支持多語法混合編程,附贈可視化游戲拖拽生成工具的(旁白:此人已瘋,速打999)
浙公網安備 33010602011771號