我创建了两张renderTexture A 和 B,都是屏幕大小,放在同一位置,
然后交替把一张renderTexture 通过visit方法画到另一个renderTexture上。
结果发现每一次调用visit方法得到的图像四周都会被拉伸一小段距离,中间区域则正常。(具体可看以下截图)
我的操作步骤如下:
1)draw a sprite to renderTexture A
(like A->beginWithClear(0, 0, 0, 0);sprite->visit();A->end() )
2)draw A to renderTexture B
(like B->beginWithClear(0, 0, 0, 0);A->visit();B->end() ) )
3)in the next update ,draw B back to renderTexture A
(like A->beginWithClear(0, 0, 0, 0);B->visit();A->end() )
重复步骤2和3,会发现拉伸 因累加而越来越明显
代码片段如下:
auto s = Director::getInstance()->getWinSize();
renderTexture1 = RenderTexture::create(s.width, s.height, Texture2D::PixelFormat::RGBA8888);
renderTexture1->retain();
renderTexture1->setPosition(Point(s.width / 2, s.height / 2));
this->addChild(renderTexture1);
renderTexture2 =RenderTexture::create(s.width, s.height, Texture2D::PixelFormat::RGBA8888);
renderTexture2->setPosition(s.width/2, s.height/2);
renderTexture2->retain();
this->addChild(renderTexture2);
renderTexture1->beginWithClear(0, 0, 0, 0);
auto sprite = Sprite::create("testBg.png");
sprite->retain();
sprite->setPosition(s.width/2, s.height/2);
sprite->visit();
renderTexture1->end();
this->schedule(schedule_selector(RenderTextureSave::doNextSchedule),0.1);
int countn=0;
void RenderTextureSave::doNextSchedule(float dt){
if(countn++==100) this->unschedule(schedule_selector(RenderTextureSave::doNextSchedule));
if(countn%2==1){
renderTexture2->beginWithClear(0, 0, 0, 0);
renderTexture1->cocos2d::Node::visit();
renderTexture2->end();
}else{
renderTexture1->beginWithClear(0, 0, 0, 0);
renderTexture2->cocos2d::Node::visit();
renderTexture1->end();
}
}
以下是截图: