|
|
免费打工仔已经做了很多工作,使用他发布的包目前已经可以很容易的在Ogre中使用中文了.
1.4.0版中Ogre本身支持了Unicode, 也使这个工作变得更容易.
但用免费打工仔的方法,有一个问题就是需要修改Ogre和CEGUI的代码.Ogre和CEGUI的使用协议都是不允许修改其本身代码的.这样的话这种办法就无法使用在商业项目中了.
经过一些摸索,在我手头的项目中已经基本实现了中文输入的支持,而无须违反LGPL.
首先是WM_CHAR消息的响应, Ogre本身提供的程序框架并不能响应这个消息, 解决办法很简单, 就是不使用Ogre创建win32窗口,自己创建窗口,处理windows消息.对于商业游戏来说,无须觉得这样做会增加额外的工作量,因为由Ogre创建的窗口不能获取跟Ogre本身无关的消息的响应, 所以在不修改Ogre代码的情况下,Ogre自带的创建窗口的方法在实际项目中几乎没有实用价值.
相关代码请看
http://www.ogre3d.org/wiki/index.php/Simple_Win32_Program
里面有在自己创建的win32窗口中使用OGRE的教程.
然后是CEGUI对中文支持问题,这里需要修改CEGUI关于文字显示的部分和EDITBOX控件输入部分(这里说的是我的想法,不知道免费打工仔是否这样做的).EDITBOX控件的问题通过派生控件应该就可以解决, 但目前我还没找到如何避免修改CEGUI文字显示部分的做法.不过由于Ogre已经支持了Unicode, 估计下个版本的CEGUI应该就会支持Unicode文字显示了.一定要使用CEGUI的话可以先去修改CEGUI代码,只要在项目结束前等到CEGUI的版本更新就行了.
我目前的方法是不使用CEGUI, 如果游戏不需要太复杂的界面,自己实现简单GUI系统其实也是可行的,工作量并不是想象中那么大, window的基本功能,消息传递,事件系统,加上Button, EditBox, ScrollBar这几个基本控件,一周左右时间基本可以搞定. 当然也不是推荐所有项目都去自己写GUI, 想做完善确实会花相当多的人力, 只是不愿意把希望寄托在CEGUI版本更新的情况下的一种选择.
另外关于要不要自己写IME部分,我的想法是除非游戏真的那么在乎全屏和窗口的一点点速度差异, 使用Popup窗口 + 指定TopMost + 响应LoseActive消息来实现假全屏, 是更方便的做法. 自己绘制的IME, 方便程度还是无法跟输入法本身提供的界面相比,而且不排除玩家会习惯使用一些奇怪的输入法。用假全屏就可以直接使用系统的IME窗口了.特别是需要大量的中文输入的MMORPG,使用假全屏应该是省时省力的做法。
如果对上面我说的东西有什么意见或疑问,欢迎回帖讨论。
最后说些没用的,不知道目前国内哪些朋友在使用Ogre进行项目开发,如果有的话可加我MSN:lmas19820607@hotmailcom,大家可以多交流。我接触Ogre时间不算长,不过挺喜欢这个引擎。之后有时间的话会陆续写一些使用Ogre做项目这段时间的心得和技巧出来,也希望使用Ogre高手们也能多和我们分享一些经验。 |
|