Stroke example for CCLabelTTF and CCSprite.
来源:互联网 发布:魔兽数据库7.3 编辑:程序博客网 时间:2024/06/07 23:00
Hey guys! Several days ago i found a cocs2d-iphone examples "stroke effect for CCLabelTTF objects". Here is the link to the cocos2d-iphone forum:http://www.cocos2d-iphone.org/forum/topic/12126
I made little modifications in this example and rewrote it for c++. Here is my code:
1CCRenderTexture* createStroke(CCSprite* label, int size, ccColor3B color, GLubyte opacity) 2 { 3 4 CCRenderTexture* rt = CCRenderTexture::renderTextureWithWidthAndHeight( 5 label->getTexture()->getContentSize().width + size * 2, 6 label->getTexture()->getContentSize().height+size * 2 7 ); 8 9 CCPoint originalPos = label->getPosition();1011 ccColor3B originalColor = label->getColor();1213 GLubyte originalOpacity = label->getOpacity();1415 bool originalVisibility = label->getIsVisible();1617 label->setColor(color);1819 label->setOpacity(opacity);2021 label->setIsVisible(true);2223 ccBlendFunc originalBlend = label->getBlendFunc();2425 ccBlendFunc bf = {GL_SRC_ALPHA, GL_ONE};2627 label->setBlendFunc(bf);2829 CCPoint bottomLeft = ccp(30 label->getTexture()->getContentSize().width * label->getAnchorPoint().x + size, 31 label->getTexture()->getContentSize().height * label->getAnchorPoint().y + size);3233 CCPoint positionOffset= ccp(34 - label->getTexture()->getContentSize().width / 2,35 - label->getTexture()->getContentSize().height / 2);3637 CCPoint position = ccpSub(originalPos, positionOffset);3839 rt->begin();4041 for (int i=0; i<360; i+= 15) // you should optimize that for your needs42 {43 label->setPosition(44 ccp(bottomLeft.x + sin(CC_DEGREES_TO_RADIANS(i))*size, bottomLeft.y + cos(CC_DEGREES_TO_RADIANS(i))*size)45 );46 label->visit();47 }48 rt->end();4950 label->setPosition(originalPos);51 label->setColor(originalColor);52 label->setBlendFunc(originalBlend);53 label->setIsVisible(originalVisibility);54 label->setOpacity(originalOpacity);5556 rt->setPosition(position);5758 return rt;59}
CCSprite* sprite = CCSprite::spriteWithFile("some_sprite.png");23 addChild(sprite);45 CCRenderTexture* tex = createStroke(sprite, 2 /*size*/, ccc3(0, 255, 0)/*color*/, 50 /*opacity*/);67 addChild(tex, sprite->getZOrder() - 1);
static CCRenderTexture* createStroke(CCSprite* label, int size, ccColor3B color, GLubyte opacity){ CCRenderTexture* rt = CCRenderTexture::create(label->getTexture()->getContentSize().width + size * 2, label->getTexture()->getContentSize().height+size * 2); CCPoint originalPos = label->getPosition(); ccColor3B originalColor = label->getColor(); GLubyte originalOpacity = label->getOpacity(); label->setColor(color); label->setOpacity(opacity); bool originalVisibility = label->isVisible(); ccBlendFunc originalBlend = label->getBlendFunc(); ccBlendFunc bf = {GL_SRC_ALPHA, GL_ONE}; label->setBlendFunc(bf); CCPoint bottomLeft = ccp( label->getTexture()->getContentSize().width * label->getAnchorPoint().x + size, label->getTexture()->getContentSize().height * label->getAnchorPoint().y + size); //原來沒有判斷AnchorPoint的寫法 // CCPoint positionOffset= ccp( - label->getTexture()->getContentSize().width / 2, // - label->getTexture()->getContentSize().height / 2); //SetAnchorPoint會影響到positionOffset,所以要做判斷 CCPoint positionOffset = CCPointZero; if(label->getAnchorPoint().x == 0.5f){ positionOffset.x = 0; }else if(label->getAnchorPoint().x == 0.0f){ positionOffset.x =- label->getTexture()->getContentSize().width / 2; }else{ positionOffset.x = label->getTexture()->getContentSize().width/2; } if(label->getAnchorPoint().y == 0.5f){ positionOffset.y = 0; }else if(label->getAnchorPoint().y == 0.0f){ positionOffset.y =- label->getTexture()->getContentSize().height / 2; }else{ positionOffset.y = label->getTexture()->getContentSize().height/2; } CCPoint position = ccpSub(originalPos, positionOffset); rt->begin(); for (int i=0; i<360 data-blogger-escaped-for="" data-blogger-escaped-i="" data-blogger-escaped-label-="" data-blogger-escaped-needs="" data-blogger-escaped-optimize="" data-blogger-escaped-should="" data-blogger-escaped-that="" data-blogger-escaped-you="" data-blogger-escaped-your="">setPosition( ccp(bottomLeft.x + sin(CC_DEGREES_TO_RADIANS(i))*size, bottomLeft.y + cos(CC_DEGREES_TO_RADIANS(i))*size) ); label->visit(); } rt->end(); label->setPosition(originalPos); label->setColor(originalColor); label->setBlendFunc(originalBlend); label->setVisible(originalVisibility); label->setOpacity(originalOpacity); rt->setPosition(position); //反踞齒 rt->getSprite()->getTexture()->setAntiAliasTexParameters(); return rt; }
- Stroke example for CCLabelTTF and CCSprite.
- One example for learning "for and while"
- Stroke and Brain
- Java: 实例 Example for Java Date and Calendar
- good example for web automation and exe automation
- Python_Scrapy:Installing lxml for Python and run an example
- example for document classify use nltk and python
- A functional example for save and load model from Tensorflow
- CCSprite
- CCSprite
- CCSprite
- cocos2d-x for android --CCSprite精灵
- cocos2d-x for android:CCSprite 精灵动画
- cocos2d-x for android:CCSprite 精灵动画
- cocos2d-x for android:CCSprite 精灵动画
- Makefile and Example
- JSON and Servlet example
- @PostConstruct and @PreDestroy example
- calculator
- MongoDB数据修改总结
- 浏览器屏蔽百度推广广告
- 通过百度地图API,将百度坐标转换成GPS经纬度
- 如何在博客等文章中添加带有滚动条的文本框
- Stroke example for CCLabelTTF and CCSprite.
- Redis入门
- LCA(最近公共祖先)问题的新老解法对比
- 依旧高精度
- eclipse 设置默认编码为Utf-8
- UIImagePickerController属性与使用
- textarea 禁止拉动兼容
- Keil C51对C语言的关键词扩展之十一: xdata
- C++基础知识回顾