Ogre overlay显示中文并横向滚动

Way1 通过时间改变TextAreaOverlayElement的Caption

Ogre 通过时间改变TextAreaOverlayElement的Caption的方式界面显示有卡顿的感觉,有没有其他方式?(每隔一段时间移动一个汉字,注意linux下一个汉字占3个字节)

Way2:滚动参考:实现上下滚动效果:

https://wiki.ogre3d.org/Scrolling+Message
效果不怎样。

Way3 纹理滚动

TextAreaOverlayElement * ele = OverlayManager::getSingleton().getOverlayElement("test");
FontPtr font = ele.getFont();
MaterialPtr material = font.getMaterial(); material.getTechnique(0).getPass(0).getTextunitState(0).setScrollAnimation(2.0,0.0);

问题:

汉字滚动时会出现乱码,应该是font里面的code-point是几千个汉字,所以纹理包含了所有的汉字,滚动时拆分了汉字。

解决方法:

typedef std::<Font::CodePoint,Font::CodePoint>CodePointRange;
typedef std::vector<CodePointRange> CodePointRangeList;

TextAreaOverlayElement * ele = OverlayManager::getSingleton().getOverlayElement("test");
ele.setCaption(L"你好啊朋友");
FontPtr font = ele.getFont();
font.clearCodePointRanges();//清空rCodePoint
DisplayString caption = ele.getCaption();
DisplayString ::iterator i, iend;
iend = caption.end();
for(i = caption.begin();i!=iend;++i){
	Font::CodePoint char = i.getCharacter();
	font.addCodePointRange(CodePointRange(char ,char ));//将显示内容的CodePoint加入字体
}
if(!font)
return;
if(!font.isLoaded())
font.load();//加载字体,//生成纹理

ele.setFontName("CN");
ele.getMaterial()->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setScrollAnimation(-1.0,0.0);//-1往左滚,1往右滚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值