Cocos2d-x V3.2。使用RenderTexture创建精灵

时间:2014-12-17 07:50:45

标签: c++ cocos2d-x

我有一个问题。

我正在尝试制作场景的屏幕截图然后制作精灵并将此精灵传递给其他场景。 我这样做:

RenderTexture* texture = RenderTexture::create((int)Director::getInstance()->getWinSize().width, (int)Director::getInstance()->getWinSize().height, Texture2D::PixelFormat::RGBA8888);
texture->begin();
Director::getInstance()->getRunningScene()->visit();
texture->end();
Sprite* bgSprite = Sprite::createWithTexture(texture->getSprite()->getTexture());
bgSprite->setRotationX(180);
/-------------------------------------
LoadScreen* loadLayer = LoadScreen::create(GameScene, this->_carModel, bgSprite/*, this*/);
/-------------------------------------

然后在下一个场景中我做了:

bgSprite->setPosition(Point(Director::getInstance()->getVisibleSize().width / 2, Director::getInstance()->getVisibleSize().height / 2));
bgSprite->setOpacity(200);
this->addChild(bgSprite, 1, 1);

我调试了这个。 Sprite不为null。这个精灵的纹理有大小等。 我尝试在文件中保存texure。结果是空的.png文件。

1 个答案:

答案 0 :(得分:1)

这是一个引擎问题,该文件在以前的版本中始终使用RGB保存。

由于cocos2d-x 3.0的渲染基于命令队列,我们​​应该总是用命令包装读/写帧缓冲操作。直接调用newImage()并不能保证正常工作。但是" RenderTexture :: saveToFile"应该工作得很好,因为它在代码中用自定义命令包装。

我认为此问题已在cocos2d-x v3.3中解决,请参阅http://www.cocos2d-x.org/issues/5562以获取更多信息。

你也可以看看" cpp-tests"与cocos2d-x捆绑在一起,了解如何保存场景或精灵的屏幕截图。