c++ - Cocos2d-x V3.2。使用 RenderTexture 创建 Sprite

标签 c++ cocos2d-x

我有一个问题。

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

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 不为空。这个 Sprite 中的纹理有大小等。 我尝试将纹理保存在文件中。结果是空的 .png 文件。

最佳答案

是引擎的问题,之前的版本都是用RGB保存的。

由于cocos2d-x 3.0的渲染是基于command queue的,所以我们应该始终将读写frame buffer的操作用command包裹起来。直接调用 newImage() 不能保证工作正常。但是“RenderTexture::saveToFile”应该可以正常工作,因为它在代码中包含了自定义命令。

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

您还可以查看与 cocos2d-x 捆绑在一起的“cpp-tests”,了解如何保存场景或 Sprite 的屏幕截图。

关于c++ - Cocos2d-x V3.2。使用 RenderTexture 创建 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27520628/

相关文章:

c++ - dynamic_cast以意外的方式成功

c++ - 如何从 QTreeWidget 中删除顶级 QTreeWidgetItem?

ios - cocos2d-x-2.2.6/Cocos2dx 2.x加速度计倾斜不起作用

ios - Libz 没有在 XCode 中链接

android - 如何在 MacOs Lion 上设置 cocos2dx for android?

c++ - 在 Rcpp 中分配一个大型二维数组 NumericVectors

Java 注释 vs C++ pragma

c++ - std::lower_bound 跳过无效元素

android - 在 cocos2d-x 中监听 Android 后退按钮

android - Cocos2d-js:一些演示不能在 Genymotion 上运行