(一)工具修改
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最上面)。