//先把代码粘上去,有空仔细编辑下
说白了,就是先把ImageView向texture渲染一下,再把RenderTexture的纹理取出来,放在自己写的灰度精灵里。而后再渲染到RenderTexture里。之后调用ImageView的getVirtureRender。把它强转为CCSprite,而后调用initWithTexture。ImageView变灰就完成了。
3.x的小伙伴们,要记住渲染队列这个东西,rtt需要设置成成员变量,初始化的时候retain一下,不然会被释放。
大神们可能感觉这东西比较白痴,但对于我们这样刚毕业的程序猿来说,这还是很有用的。
至少,当时我为这问题纠结了好久。
CCSize btnDrawAwardSize = m_btnDrawAward->getSize();
CCPoint btnDrawAwardPoint = m_btnDrawAward->getPosition();
m_btnDrawAward->setPosition(m_btnDrawAward->getContentSize()/2.0f);
m_btnDrawAward->setScaleY(-1.0f);
CCRenderTexture *rtt = CCRenderTexture::create(btnDrawAwardSize.width, btnDrawAwardSize.height);
rtt->getSprite()->getTexture()->setAntiAliasTexParameters();
rtt->begin();
m_btnDrawAward->visit();
rtt->end();
m_btnDrawAward->setPosition(btnDrawAwardPoint);
m_btnDrawAward->setScaleY(1.0f);
m_btnDrawAward->setVisible(false);
ImageView *grayBtn = ImageView::create();
grayBtn->setSize(btnDrawAwardSize);
grayBtn->setPosition(btnDrawAwardPoint);
CCSprite *imgGraySprite = dynamic_cast<CCSprite*>(grayBtn->getVirtualRenderer());
CCTexture2D *renderedTexture = rtt->getSprite()->getTexture();
GraySprite *graySprite = GraySprite::create(renderedTexture);
//CCSprite *graySprite = CCSprite::createWithTexture(renderedTexture);
graySprite->setPosition(graySprite->getContentSize()/2.0f);
graySprite->setScaleY(-1.0f);
CCSize contentSize = graySprite->getContentSize();
CCRenderTexture *rtt1 = CCRenderTexture::create(contentSize.width,contentSize.height);
rtt1->getSprite()->getTexture()->setAntiAliasTexParameters();
rtt1->begin();
graySprite->visit();
rtt1->end();
imgGraySprite->initWithTexture(rtt1->getSprite()->getTexture());
///imgGraySprite->initWithTexture(renderedTexture);
//imgGraySprite->setShaderProgram(getGrayShader());
addChild(grayBtn);