cocos2d-x 文字特效freetype2

cocos2d-x 文字特效freetype2,第1张

概述最近做聊天系统,遇到棘手的问题,就是字体要支持多颜色、换行、表情(图片)、超链接!我们不会从OpenGL底层来做这个工作,因为那样工作量非常大,不现实,考虑在已有的cocos2d-x接口上进行处理,来组合出我们需要富文本。因Android IOS 似乎都支持 freetype2,所以就优先考虑了。 1.下载准备:       freetype2:http://download.savannah.g

最近做聊天系统,遇到棘手的问题,就是字体要支持多颜色、换行、表情(图片)、超链接!我们不会从OpenGL底层来做这个工作,因为那样工作量非常大,不现实,考虑在已有的cocos2d-x接口上进行处理,来组合出我们需要富文本。因AndroID IOS 似乎都支持freetype2,所以就优先考虑了。


1.下载准备:


freetype2:http://download.savannah.gnu.org/releases/freetype/

扩展库:https://github.com/happykevins/cocos2dx-ext


2.搭建环境


2.1 配置freetype2


2.2.创建工程,添加文件,如下:

工程根目录:




class文件夹:




vs2010工程目录:



3. 代码:


HelloWorldScene.h

[cpp] view plain copy #ifndef__HELLOWORLD_SCENE_H__ #@R_301_5552@__HELLOWORLD_SCENE_H__ #include"cocos2d.h" #include"cocos-ext.h" #include<renren-ext.h> USING_NS_CC; USING_NS_CC_EXT; classHelloWorld:publiccocos2d::cclayer { public: @H_301_167@//Here'sadifference.Method'init'incocos2d-xreturnsbool,insteadofreturning'ID'incocos2d-iphone virtualboolinit(); //there'sno'ID'incpp,sowerecommendreturningtheclassinstancepointer staticcocos2d::CCScene*scene(); //aselectorcallback voIDmenuCloseCallback(CCObject*pSender); //implementthe"staticnode()"methodmanually CREATE_FUNC(HelloWorld); boolcctouchBegan(CCtouch*ptouch,CCEvent*pEvent); voIDcctouchmoved(CCtouch*ptouch,CCEvent*pEvent); //HTMLevents voIDonHTMLClicked( IRichNode*root,IRichElement*ele,int_ID); voIDonHTMLMoved( int_ID, constCCPoint&location,constCCPoint&delta); }; #endif//__HELLOWORLD_SCENE_H__ HelloWorldScene.cpp

@H_629_301@ staticCCHTMLLabel*s_HTMLLabel=NulL; std::stringtt; //on"init"youneedtoinitializeyourinstance boolHelloWorld::init() ////////////////////////////// //1.superinitfirst if(!cclayer::init()) returnfalse; } CCSizevisibleSize=CCDirector::sharedDirector()->getVisibleSize(); CCPointorigin=CCDirector::sharedDirector()->getVisibleOrigin(); ///////////////////////////// //2.addamenuitemwith"X"image,whichisclickedtoquittheprogram //youmaymodifyit. //adda"close"icontoexittheprogress.it'sanautoreleaSEObject CcmenuItemImage*pCloseItem=CcmenuItemImage::create( "Closenormal.png",108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> "CloseSelected.png", this,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> menu_selector(HelloWorld::menuCloseCallback)); pCloseItem->setposition(ccp(origin.x+visibleSize.wIDth-pCloseItem->getContentSize().wIDth/2, origin.y+pCloseItem->getContentSize().height/2)); //createmenu,it'sanautoreleaSEObject Ccmenu*pMenu=Ccmenu::create(pCloseItem,NulL); pMenu->setposition(CCPointZero); this->addChild(pMenu,1); usingnamespacedFont; cclayercolor*l=cclayercolor::create(ccc4(0xb0,0xb0,0xff)); l->setContentSize(this->getContentSize()); this->addChild(l); //控件文字样式(尺寸、对齐方式、字体等等) //Font1 FontCatalog*Font_catalog=NulL; Font_catalog=FontFactory::instance()->create_Font( "Font1","simhei.ttf",0xffffffff,32,e_plain,0.0f,0); //Font2 Font_catalog=FontFactory::instance()->create_Font( "Font2","simkai.ttf",24,e_shadow,1.0f,0xff000000,0); Font_catalog->add_HackFont("HTMLtest/MarkerFelt.ttf",latin_charset(),-1); //Font3 "Font3","simli.ttf",20,e_border,108); List-style:decimal-leading-zero outsIDe; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> Font_catalog->add_HackFont("simhei.ttf",5); CCSizevsize=CCDirector::sharedDirector()->getVisibleSize(); CCString*str_utf8=CCString::createWithContentsOffile("HTML.htm"); CCHTMLLabel*HTMLlabel=CCHTMLLabel::createWithString(str_utf8->getCString(),248); line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> CCSize(vsize.wIDth*0.8f,vsize.height),"default"); HTMLlabel->setAnchorPoint(ccp(0.5f,0.5f)); HTMLlabel->setposition(ccp(vsize.wIDth*0.5f,vsize.height*0.5f)); addChild(HTMLlabel); s_HTMLLabel=HTMLlabel; //创建超链接 HTMLlabel->registerListener(FontFactory::instance()->dump_textures(); true; } voIDHelloWorld::onHTMLClicked( IRichNode*root,87); background-color:inherit; Font-weight:bold">int_ID) { cclog("[OnClicked]ID=%d",_ID); if(!s_HTMLLabel) return; elseif(_ID==1002)//close s_HTMLLabel->setVisible(false); if(_ID==2000)//reload s_HTMLLabel->setString(str_utf8->getCString()); voIDHelloWorld::onHTMLMoved( constCCPoint&delta) cclog("[OnMoved]ID=%d",_ID); if(!s_HTMLLabel) return; if(_ID==1001) s_HTMLLabel->setposition(ccpAdd(delta,s_HTMLLabel->getposition())); boolHelloWorld::cctouchBegan(CCtouch*ptouch,CCEvent*pEvent) voIDHelloWorld::cctouchmoved(CCtouch*ptouch,CCEvent*pEvent) }
运行效果图:



点击超链接:



控制台显示:

总结

以上是内存溢出为你收集整理的cocos2d-x 文字特效freetype2全部内容,希望文章能够帮你解决cocos2d-x 文字特效freetype2所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1038702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存