Ogre MyGUI 中文方案及在安卓中的应用

(一)工具修改

MyGUI作者是俄罗斯人,对非英文提供了非常好的解决方案,几乎每个Text控件都有UString重载。

首先是MyGUI的字体方案和配置架构:

1、用的是freetype。

2、配置在Mygui\Media\MyGUI_Media\MyGUI_Fonts.xml

然后是MyGUI启动的默认字体设置在Mygui\Media\MyGUI_Media\MyGUI_Settings.xml

按照网上的牛人提供的字库配置方案就好http://blog.youkuaiyun.com/zzz822163/article/details/6161066

注意注释掉这两个属性,3.2.0以后这两项已经弃用了,运行时会有warning。

<!--<Property key="SpaceWidth"

<!--<Property key="CursorWidth"

然后是编辑器:

1、把所有Mygui\Media\Tools下的layout中的FrontName都拿掉,用默认的。

2、MyGUI的编辑器都用了_Dark皮肤。所以要想在编辑框中的中文也显示正常需要

把所有Mygui\Media\Common\Themes\MyGUI_DarkTemplate.xml的FrontName

改成:

   <!--<Property key="FontName" value="DejaVuSansFont_13"/>-->
   <Property key="FontName" value="default"/>

这样编辑器就里里外外都是MyGUI_Fonts.xml里定义的缺省字体了。

我修改的http://download.youkuaiyun.com/detail/undercallfile/7770627

 

(二)如何在android中应用

我用的渲染器是Ogre。而MyGUI的OgrePlatforms提供的固定管线在gles下并不能正常工作。所以需要进行一些修改,主要是加一对shader(Ogre论坛拷贝的,一个模仿固定管线的shader)。

后面附有有修改资源,我这里不多说。这是原论坛http://www.ogre3d.org/addonforums/viewtopic.php?f=17&t=29658&p=101900&hilit=gles#p101900

用到的预编译sdk,比较大434兆http://pan.baidu.com/s/1dD5rP2h看看能用不,第一次用百度网盘

建立环境变量DISH_HOME定位到下载的目录dish_sdk

 

编译各个开源库变成android,主要有4个内容

1、拷贝源码。

2、拷贝一个通用的android工程,并修改cpp搜索路径。

3、编译成.a并拷贝到你的sdk预编译目录。

4、使用。

 

只说2,3,4

第二部资源

用法:

 修改libtest\proj.android\jni\OgreBullet_Dynamics.mk 的搜索路径。

把libtest\src换成开源代码,最好是整个都放进去。

然后修改 some_static.mk中的

# config self source file path ,suffix. MY_FILES_PATH := $(LOCAL_PATH)/../../OgreBullet/Dynamics 搜索路径,注意用 MY_FILTER_OUT排除不要的文件和目录

第四步:

附我的一个工程模板:

添加环境变量:DISH_HOME 到some_you_uzip_dir/dish

 

里面OSShell\proj.android\jni\下的some_fuck.mk

里面都有一些

LOCAL_C_INCLUDES += $(DISH_HOME)/sdk/libevent/include
是添加编译期头文件的。

Android.mk中

类似LOCAL_LDLIBS += -L$(DISH_HOME)/sdk/Ogre/lib/Android/$(APP_ABI)
是添加链接期lib搜索路径的

类似LOCAL_WHOLE_STATIC_LIBRARIES += client_static
是添加client.mk模块的(注意:cpp文件过多基本都会触发gcc入参过长导致无法编译的情况,所以安全起见,分开模块编译在链接)。

类似LOCAL_LDLIBS += -lMyGUI_OgrePlatform
是链接期的lib文件名。

 

然后MY_FILES_PATH := $(LOCAL_PATH)/Android
和# MY_FILTER_OUT := ../../proj.android%
连上手机编译运行就跑起来了。

 

关于在win上调试,我思考了一下还是决定使用gles2,而不是更加快速的gl。

gles2的环境需要:

1、sdk\PowerVR\GraphicsSDK里的几个dll

2、重写Ogre的关于gles2的RenderSystems(如果你需要让Renderwindow里的resize和其他几个函数工作的话就写,然后编译成android,我没写,我也觉得没必要)。

3、在构建Ogre的时候勾上gles2的RenderSystems,然后编译。

 

cocos2d-x的工程架构我觉得比写一堆cmake更让人觉得可靠,而且我也不太精通cmake。所以我是直接把各个平台(win、android)都写了一个工程。

这样在构建上各位不会碰到问题。

 

工程架构:

1、大家最关心的入口在OSShell\Classes\client\DishAppDelegate.cpp的 void AppDelegate::finishLaunching()

2、用了lua,没有用ogre自己的resources.cfg,而是用lua添加的,因为用的FileSystem管理器不一样。

3、弃用了Ogre自带的APKFileSystem。

4、lua添加的渲染插件,因为gles的android和win的加载方式不一样,而且也容易切换,如果在win上调试可以切换到gl。

5、app的启动流程各个平台基本一样:UtilFile-->lua->render->mygui_platform->input->ImplApplication,然后ImplApplication跑最后的入口类AppDelegate。

 

#1先说说AppDelegate:

OSShell\Classes\client\DishAppDelegate.cpp里的各个函数,注意AppDelegate并没有在程序一启动就创建,而是在ImplApplication::run中创建的,也就是AppDelegate的构造函数里可以拿到各个环境而不是像coco2d那样finishLaunching里CCScheduler居然还是空的。这样把app和Activity分离可以避免这个问题。在AppDelegate::destroy里各个环境都有效,但是AppDelegate的析构函数却拿不了环境了,这一点要注意。

#2关于lua

OSShell\Resources\media\script\model里

model_plugins.lua修改activate_render = "GLES2"可以切换render。

model_resources.lua修改resources添加上你自己的搜索路径

#3APKFileSystem

因为原Ogre自带的APKFileSystem中所有的查找操作都用了AAssetManager_open或者AAssetDir_getNextFileName,会导致启动时间变为2分钟(我的手机)。

你可以也自己写一个替代,我的是APKFileSystemArchive::exists总是返回true。然后一启动就遍历一遍文件信息,保存成一张表。以后只拿表。保留这个是因为ogre的材质脚本需要遍历编译材质脚本文件。另外如果各位要开机加速可以从这着手,手动加载编译材质脚本,然后exists总是返回true,启动的时候什么也不做,这样会快很多。

 

联系我用qq:1063907400,星期一到星期六上午11点不要打扰我。

工程都用的vs2012

工程链接http://download.youkuaiyun.com/detail/undercallfile/7770449

工程没有创建Ogre的标准的OgreHead,想弄自己来。工程里的其他工具,OSShell\Classes\shared,大家看着用,如果这些工具有问题请你修改了的同时也告诉我,嘿嘿。

我觉得可以放到GIT上去,这样估计会更好。

 

注意gles2的debug开了vld,有些机器下会非常慢(比如我的笔记本),各位可以把它注释掉(main.cpp最上面)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值