`
modabobo
  • 浏览: 518675 次
文章分类
社区版块
存档分类
最新评论

谈谈小弟最近暗自干些什么勾当(LGame WP版开发进度汇报)

 
阅读更多
时间过得真快,一转眼又快到农历新年,小弟也很久没在博客露面,趁此机会出没一下,免得被人误解赶潮流“回老家结婚”去了……

其实小弟最近不出现,并不代表着放弃了这个博客,更不代表着这个博客的更新会缓慢下来。相反,小弟最近并非不再活跃,而是一直在暗地里搞阴谋诡计(^^)~话说SVN中的JavaSE与Android版LGame-0.3.3都更新了好几次,文档也偷偷写了一部分,C#版的扩展包也快写完(核心包去年就写完了),C/C++版也完成了将近一半。等到这些都搞定,小弟就有底气在网络上多折腾一阵。

文档中的两张LGame架构草图:




下面,小弟就坡下驴的谈谈LGame的WP版,即C#版本。

其实提到LGame的C#版,不过是一个LGame for XNA的版本,简称为"LFX"(版本号与LGame Java最新版同步,首个版本即LFX-0.3.3)。因为该版本底层封装于XNA,故而不仅可以使用在WP平台,也可以发布到Windows或XBOX360环境当中(算上Mono的话,范围将更广)。

以下为C#版与Java版的差异性声明:


1、C#版并不是Java语法的跨平台版本,而是API级别的架构迁移。因此,虽然与Java版基本架构一致,但细节处差异仍需要自行处理(比如C#版中函数首字母大写,重载方式,常用数据类型,关键字的不同等等)。而后续版本小弟会提供语法转义工具,可以实现Java与C#的语法互换。

2、C#版不具备全部的Android特有API(-_-|||……),但大多数常用Java API,则可以通过该版本提供的JavaRuntime类库进行调用(功能仿造,不用的话没有强制要求,光这点多用了150多KB的代码)。


3、C#版核心包中将不使用任何非默认引入References的支持库,以免生成Windows或XBOX360游戏时出现问题。比如C#版的Store包使用System.Data.Linq实现,而该引用非默认存在,所以保险起见暂时被剔除到核心包之外,以单独包可选方式存在。

PS:关于这点,小弟最近可能将JavaSE版的Store包代码移到此处,用IsolatedStorageFile再做一个文本存储的实现,而后让两种实现自动匹配。即环境允许使用DataContext时则使用,不能时采取纯文本操作,这样就不必外置了。不过,与Android版相比有一个进步,那就是C#版核心包中直接内置了Box2D接口,而不必调用扩展包(仅限Android版用到的Box2D API,用C#重写了一遍实现)。


4、Android版LGame中默认的屏幕大小为480x320(竖屏则为320x480),而在C#版中被修改为800x480(为了照顾WP模拟器的默认大小与微软菜市场需求),如需移植Android项目,请通过MaxScreen函数进行修订,否则LGame C#版屏幕大小会与直接移植的Android版屏幕大小出现差异(事实上,由于目前示例皆移植自Android版,所以移植的示例运行时画面全部使用了缩放,也就是设定了MaxScreen(480,320))。


5、C#版中将不具备任何GLES接口(这个,是微软的东西……),在GLEx类中也将不能如Android版返回GL10或GL11的调用,而只能返回GraphicsDevice与SpriteBatch(不过,依旧仿制有常用OpenGL接口)。


6、事实上,使用LGame的C#版绝不意味着放弃XNA,因为C#版的执行类LFXPlus即Game的子类,它的API中已包含有LGame Android版的LGameAndroid2DActivity与XNA的Microsoft.Xna.Framework.Game类的全部函数,完全可以在其中进行正常的XNA操作,且能与标准LGame操作之间自由切换(C#版提供有一个特殊的XNAGame类,API和标准XNA的Game类一比一,可以同切换Screen一样直接切换该类)。


7、受环境限制,C#版在配置上会比Android版更麻烦一点,因此在C#版中新增了一个Android没有的XNAConfig类,用以通过预配置资源的方式简化流程,以求更简便的管理诸如spritefont等资源文件的切换,具体等正式发布时会细说。


C#版初始类代码结构如下图所示(因为LFXPlus是Game的子类,所以继承LFXPlus就等于继承Game):


C#版Screen结构如下图所示:


实际游戏运行画面如下图所示(AVG模块运行):


WP中最让人郁闷的地方在于,封闭空间的特性,逼得人只能将额外资源放入网络或者XAP文件中(编译WP项目生成的文件即XAP,如同Android的APK),但设定上又比Android或iOS麻烦,因为WP环境下模拟器动不动就弹“System.MethodAccessException”(更准确的讲,是常规资源加载方式至少在模拟器层面都会弹出这个异常,也就是正常加载的路被微软堵死了,逼着人用Content.Load方式,但这货又不支持文本和压缩文件等|||)很多资源加载方式根本不能用,虽然很可能是模拟器的权限问题,但小弟对此又不放心(不敢肯定微软究竟有什么阴谋……),目前只好先按照最低环境走,LGame将只支持声明好的资源文件数据流加载.

也就是说,C#版LGame必须先手动声明资源的编译类型(即加载非Content.Load支持的,诸如Texture,SpriteFont,Model等类型之外的资源时),才能正常加载数据(包括上图中出现的def.loon文件)。


具体的讲,LGame的数据流加载支持"Build Action"设定为Content或Resource模式构建的资源,不过有两点需要注意:

一,如果资源类型设定为Content,则Copy Output directory不能是Do not copy,否则不能将资源打包到编译产生的XAP。

二,如果资源类型设定为Resource,则必须引入了System.Windows支持(标准WP应用,标准Silverlight应用,乃至Silverlight与XNA混合应用都默认加载了这个支持库,唯独标准XNA默认没有此支持库,才吓得小弟默认情况下不敢往dll存资源,生怕跨平台会出问题,不然根本不必额外配置资源部署),否则不能读取dll中文件。

三,如果直接向自动生成的Content项目拖拽或添加非标准文件(向没用过WP的同志说明一下,这货是创建基于XNA的WP项目时微软自动生成的,专门用来存资源),则编译可能无法正常进行(WP默认的Content工程只能引入如下图几种管道支持的文件,不得不说,WP在权限这点上简直被塞班附体了)。所以,上述操作建议在主体工程进行。



PS:但是,如果以Content模式运行资源编译,目录又与Content文件夹一致(即在主体工程新建个"Content"文件夹,再往下面放资源),打包后的文件目录同样会在默认的Content目录下,运行时也不会有任何特殊情况发生,不知道微软限制个什么意思|||。


附带一提,微软的XAP包本身不过是一个标准的不能再标准的Zip文件,解压后是含dll在内的全部游戏资源,用Reflector反编译dll,产生的源码足以直接生成原始工程。亲测了几个比较热门的WP游戏与应用,稍微配置下都能直接运行……不是小弟拿微软说事,单论代码安全性,XAP简直还不如APK包(好歹反编译出的APK源码很难直接生成可用的Java工程啊~而XAP面对Reflector则一律秒杀成可用C#项目~),哎。

所以,使用WP的话,就请在资源保护上多下点力气吧,否则你每发布一个应用,同时也上传了一个100%的开源工程。


————————————————

说真的,LGame的C#版,应该说今天也能发布,因为核心包已经完全能够在WP环境正常运行(生成Windows游戏也没问题,XBOX360没环境,无法测试,理论上讲无碍)。小弟发这篇博文前,就曾思虑再三要不要今天先放出来再说,不过考虑到有点小问题还没处理好(在SPRG模块上有隐藏Bug,而且新增的RTS模块还没写完),所以暂时还是先不发布了……不过很快就会解决。

实际上,封装XNA做引擎比直接用Java做游戏引擎简单太多(好吧,小弟承认最近语言排行榜C#和C++上升也有小弟一份功劳,在Google查相关资料,多少也会影响点结果)。最近几天会先把C#版彻底搞定,然后就能踏踏实实做C/C++版了。话说Java版和C#版在平台局限性上比较强,同时使用Java、C#、C/C++三种语言也稍微麻烦点,如果想移植更简便,始终要靠C/C++版做全平台支持(LGame的C/C++版渲染核心为SDL的二次封装,跑PSP都没问题(亲测))。

移植开发真的很省事,既不用考虑逻辑问题,又不必考虑算法,只要做代码转义照搬即可,不过到年底小弟垒码率自然下降到平时50%机能,所以拖了很久~
分享到:
评论

相关推荐

    LGAME引擎android开发工具

    LGAME引擎是一款专为Android平台设计的游戏开发工具,主要用于创建JAVA游戏。它的核心目标是提供一个高效、易用且功能丰富的开发环境,帮助游戏开发者快速实现游戏概念并将其转化为实际的移动应用程序。当前版本为...

    LGame-master游戏开发.zip

    LGame目前版本虽然基于标准OpenGLES API开发,但项目0.1版最早脱胎于AWT Java2D时代,所以采用了AWT Graphics2D的坐标系(画布左上角为原点(x=0,y=0),Y轴向下为正值,与JavaFx或Android,JavaScript的Canvas渲染坐标一致...

    Android游戏开发框架-LGame_0.2.7

    **Android游戏开发框架-LGame_0.2.7** LGame是一款由国内开发者编写的针对Android平台的游戏开发框架,旨在简化Android游戏的开发流程,提高开发效率。它提供了丰富的功能和组件,使得开发者能够快速构建2D游戏。...

    LGame源码part4

    LGame源码part4

    LGame游戏引擎0.32

    - **跨平台支持**:LGame基于Java语言,可以轻松实现JavaSE(Java标准版)和Android平台的游戏开发,具备良好的跨平台兼容性。 - **高效性能**:利用Java的JNI(Java Native Interface)技术调用底层C/C++代码,...

    LGame-master.zip

    LGame是一款国人开发的Java游戏引擎,有Android及PC(J2SE)两个开发版本(测试版添加了C#开发版本)。该引擎除了基本的音效、图形、物理、精灵等常用组件以外,也内置有Ioc、xml、http等常用Java组件的封装,该引擎还...

    LGame游戏引擎canvas版本源码

    LGame游戏引擎canvas版本源码

    lgame游戏引擎最新3.5

    2014年10月份作者刚更新,标准LGame使用GLEx类作为引擎的最基本渲染器,允许使用JavaSE、JavaME的常用绘图API,以及OpenGL、OpenGLES的常用绘图API,而LSE与LAE包仅模拟有JavaSE、JavaME的Graphics类常用接口。...

    自己编译的一个LGAME例子

    LGame 引擎开发 本人将其连连看。和一个战棋游戏编译成apk.在我的n600上跑没问题。

    LGame源码part3

    LGame源码part3

    LGame-0.2.95

    《LGame-0.2.95:从J2ME到Android的游戏开发之旅》 LGame-0.2.95是一款专为J2ME开发者过渡到Android平台设计的游戏开发引擎。这款引擎的出现,旨在帮助熟悉Java Micro Edition(J2ME)的开发者能够快速上手Android...

    Lgame-0.4帮助文档

    Lgame-0.4 pc版 基于AWT 帮助文档 JAVA 游戏引擎 中文版,部分函数没有注释

    LGame连连看

    LGame连连看android源码分享。

    Android飞机游戏(基于LGame引擎)

    《Android飞机游戏:深入探索LGame引擎开发》 在Android平台上开发游戏,开发者们常常会寻找高效的工具和框架来加速开发进程,LGame引擎便是其中之一。本项目——"Android飞机游戏(基于LGame引擎)",是利用LGame...

    LGame游戏引擎

    LGame游戏引擎是一款开源的游戏开发框架,主要针对Java平台设计,为开发者提供了一套便捷、高效的游戏开发工具。这款引擎的最新版本为LGame-0.3.2-release,其特性与优势体现在多个方面。 首先,LGame引擎的轻量级...

    LGame-LGame-0.5-Beta-fix1.zip

    LGame-LGame-0.5-Beta-fix1

    LGame SRPG扩展包API

    LGame有个SRPG的扩展包,导出文档

    Android-LGame框架实例

    《Android-LGame框架实例详解》 在Android游戏开发领域,LGame框架是一个备受开发者青睐的开源库,尤其适合初学者和小型游戏项目。LGame基于Java语言,为开发者提供了便捷的游戏开发环境,使得构建2D游戏变得更加...

    魔术师的梦,lgame示例。

    游戏开发教程,不包含源码。 魔术师的梦 lgame示例 女流 android游戏 游戏开发

    Android-LGame中文文档去水印有书签班

    0分下载,LGame去水印有标签版中文文档。去水印是为了方便打印,请大家支持原作者。 原作者博客地址:http://blog.csdn.net/cping1982/article/category/447055

Global site tag (gtag.js) - Google Analytics