cocos2dx上如何对图片和文字做倒影(镜像)效果

cocos2dx上如何对图片和文字做倒影(镜像)效果,第1张

概述由于工作中需要对图片和文字做镜像效果,开始的时候也是一头雾水,不知道怎么做,后来自己上网查资料,最后发现cocos2dx提供的方法,可以做镜像或者倒影效果; 对于图片做倒影效果:就是声明一个同样的sprite,这个新的sprite对y轴翻转就是效果了,是不是好简单; Sprite * bgSprite = Sprite::create("fixbg.png"); bgSprite->setPos

由于工作中需要对图片和文字做镜像效果,开始的时候也是一头雾水,不知道怎么做,后来自己上网查资料,最后发现cocos2dx提供的方法,可以做镜像或者倒影的效果;

对于图片做倒影效果:就是声明一个同样的sprite,这个新的sprite对y轴翻转就是效果了,是不是好简单; Sprite * bgSprite = Sprite::create("fixbg.png"); bgSprite->setposition(100.0,70.0); this->addChild(bgSprite,0); Sprite * bgReflectionsprite; //下面是倒影的sprite Sprite * bgReflectionsprite = Sprite::create("fixbg.png"); bgReflectionsprite->setFlippedY(true);//Y轴翻转 bgReflectionsprite->setopacity(20);//设置透明度 bgReflectionsprite->setposition(100,70.0 - bgReflectionsprite->getContentSize().height - 15);//设置位置 this->addChild(bgReflectionsprite,0); 对于文字的镜像效果: 由于文字并不是图片,在网上开始找方法,发现可以使用LabelTTF和使用sprite一样的方式,实现倒影,但是我在我的pc板子上可以出现倒影,跑到我的linux板子上就无法显示,为这找了半天都没有找到原因,由于我使用的是cocos2dx3.3的版本,所以这个时候显示文字只有label这一个类,把前面的三种方式合并了,然后看label的设计思路和讲解,发现,cocos2dx对于文字是每一个问题都是一个sprite,一下子就有了解决办法,我取出每一个问题,对每一个文字进行倒影不久行了么,喜出望外,然后解决这个问题; auto * TitleTxt = Label::createWithTTF(“test文字”,“你使用的字体”,32); TitleTxt->setposition(10,10); TitleTxt->setcolor(color3B(0xd5,0xdb,0xe3)); this->addChild(TitleTxt,4); auto *TitleTxtReflection = Label::createWithTTF(“test文字”,32); TitleTxtReflection->setcolor(color3B(0xff,0xff,0xff)); TitleTxtReflection->setposition(10,(10.0- TitleTxtReflection->getContentSize().height - 5 )); this->addChild(TitleTxtReflection,4); //for循环,拿出每一个字,然后对这个字进行Y轴映射,倒影,即可 for (int i = 0; i < TitleTxtReflection->getStringLength(); i++) { Sprite* letter1 = TitleTxtReflection->getLetter(i); letter1->setFlippedY(true); letter1->setopacity(20); } 针对于文字的倒影还是有一个问题,由于英文每一个文字的大小不一样,高度也不一样,如:A,a,i ,y,p等,这样导致对文字单个进行倒影反转后,出现倒影不整齐的问题,后来通过改进这个方法:对于每一个文字,单单去设置他的位置,基本思想是:通过镜面的值 - 每一个字的位置的y值,再减去一个倒影的高度即可; //表示是当前文字的的ttf设置位置,后面倒影的每一个字都是通过这个去拿到每一个单词的位置的 pockectTitleTxt = Label::createWithTTF(data->pocketdata.TitleID_str,C_Font_NMEDIUM,42 / resolutiondiv); pockectTitleTxt->setcolor(color3B(0xff,0xff)); pockectTitleTxt->setposition((50.0 / resolutiondiv + posWIDth),-155.0 / resolutiondiv);//50,-130 pockectTitleTxt->setopacity(255); for (int i = 0; i < pockectTitleTxt->getStringLength(); i++) { Sprite* letter1 = pockectTitleTxt->getLetter(i); letter1->setopacity(255); } this->addChild(pockectTitleTxt,4); //文字的倒影的ttf, pockectTitleTxtReflection = Label::createWithTTF(data->pocketdata.TitleID_str,42 / resolutiondiv); pockectTitleTxtReflection->setcolor(color3B(0xff,0xff)); //pockectTitleTxtReflection->setposition((50.0 / resolutiondiv + posWIDth),(-232.0 / resolutiondiv - pockectTitleTxt->getContentSize().height + 5.0 / resolutiondiv));//50,-130 this->addChild(pockectTitleTxtReflection,4); for (int i = 0; i < pockectTitleTxtReflection->getStringLength(); i++) { Sprite* letter1pockectTitleTxt = pockectTitleTxt->getLetter(i); Sprite* letter1 = pockectTitleTxtReflection->getLetter(i); letter1->setFlippedY(true); letter1->setopacity(25); letter1->setAnchorPoint(Vec2(0.5,0.5)); //关键的一步,拿到正面文字的每一个单词的位置,然后对应的位置付给对应的文字就好了 letter1->setposition((letter1pockectTitleTxt->getposition().x ),-155.0 / resolutiondiv - letter1pockectTitleTxt->getposition().y - 50 / resolutiondiv);//50,-130 } 由于本人在模拟器和电视上做的,没有办法截屏就没有贴图片了,看的同学,多看看文字好了,不懂得可以留言,我看到就会回复; 总结

以上是内存溢出为你收集整理的cocos2dx上如何对图片和文字做倒影(镜像)效果全部内容,希望文章能够帮你解决cocos2dx上如何对图片和文字做倒影(镜像)效果所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存