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



我有问题。

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

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);

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

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

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

我认为这个问题已经在 cocos2d-x v3.3 中解决了,有关更多信息,请参阅 http://www.cocos2d-x.org/issues/5562。

你也可以看看与

cocos2d-x捆绑在一起的"cpp-tests",看看如何保存你的场景或精灵的截图。

最新更新