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往右滚