void DecorateScene::saveTheScreenShot(){ NotificationCenter::getInstance()->postNotification(kShotScreenEvent, __String::create("No")); RenderTexture* saveImageTexture = RenderTexture::create(canEatLayer->getContentSize().width, canEatLayer->getContentSize().height, Texture2D::PixelFormat::RGBA8888); saveImageTexture->begin(); canEatLayer->visit(); saveImageTexture->end(); saveImageTexture->getSprite()->setFlippedY(false); saveImageTexture->getSprite()->getTexture()->setAntiAliasTexParameters(); Director::getInstance()->getRenderer()->render(); log("the path is %s", (STFileUtility::getStoragePath()+"temp.png").c_str()); Image* pImage = saveImageTexture->newImage(); pImage->saveToFile(STFileUtility::getStoragePath()+"temp.png", false); pImage->release(); saveImageTexture->beginWithClear(1.0, 1.0, 1.0, 0); cannotEatLayer->visit(); saveImageTexture->end(); saveImageTexture->getSprite()->setFlippedY(false); saveImageTexture->getSprite()->getTexture()->setAntiAliasTexParameters(); Director::getInstance()->getRenderer()->render(); Image* pImage2 = saveImageTexture->newImage(); pImage2->saveToFile(STFileUtility::getStoragePath()+"temp1.png", false); pImage2->release(); }
bool ScribbleTouchNode::useTarget(Sprite* sprite){ RenderTexture* rt = RenderTexture::create(sprite->getContentSize().width, sprite->getContentSize().height); rt->begin(); sprite->visit(); rt->end(); Director::getInstance()->getRenderer()->render(); auto image = rt->newImage(); restorePixes = calcute(image); return ScribbleNode::useTarget(sprite); }
void GameLayer::gameOver() { Size visibleSize = Director::getInstance()->getWinSize(); RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8); // Go through all child of Game class and draw in renderTexture // It's like screenshot renderTexture->begin(); Director::getInstance()->getRunningScene()->visit(); renderTexture->end(); Director::getInstance()->getRenderer()->render();// Must add this for version 3.0 or image goes black Director::getInstance()->getTextureCache()->addImage(renderTexture->newImage(), "GameOverImage"); // pause the game, push to scene stack and change to new scene // Don't forget to pop it Director::getInstance()->pushScene(GameOverScene::create()); }
//-----------------------------------------保存图片----------------------------------------------------------- bool ShowStar::saveItem(DiySaveType type, Node *node) { if (type == DiySaveType::other || !node) return false; int index = (int)type; SaveItemTemplate object = SaveItemTemplateTem(WJUtils::stringAddInt("Save_", index, 3).c_str()); RenderTexture *renderTexture = visitNode(type, node); //// test ?? //node->retain(); //node->removeFromParentAndCleanup(false); //const Size &sizeStar = this->getContentSize(); //node->setVisible(true); //node->setPosition(Vec2(sizeStar.width / 2, sizeStar.height / 2) + Vec2(-300, -600)); //this->addChild(node, 1000); //node->release(); // 取得当前已经保存过的总数 std::string totalName = object.savePreKey; std::string sumName = object.savePreKey; int sum = UserDefault::getInstance()->getIntegerForKey(sumName.append("Sum").c_str(), 0); //保存png std::string fileName = object.savePreKey; fileName.append("_"); fileName.append(WJUtils::stringAddInt("", sum + 1).c_str()); fileName.append("_"); for (int i = 0; i < 6; i++) { int c = WJUtils::randomInt(2); int num = WJUtils::randomInt(26); char m; if (c == 0) { m = num + 'A'; } else { m = num + 'a'; } fileName += m; } fileName.append(".png"); std::string fullPath = GameManager::getAtlasSavePath() + fileName; Image *image = renderTexture->newImage(true); WJGraphics::unblendAlpha(image); bool result = image->saveToFile(fullPath, false); CC_SAFE_DELETE(image); // 保存照片成功 if (result) { int nowIndex = (sum + 1) % object.count; int exitUsed = 0; // 需要覆盖以前保存的旧的图片 if (sum + 1 > object.count) { // 判断当前覆盖的图片是否在使用?? /*if (fileIsUsedFromPrincess(nowIndex)) { exitUsed = 1; nowIndex = nowIndex + 1 > object.count ? 1 : nowIndex + 1; }*/ totalName.append(WJUtils::stringAddInt("", nowIndex == 0 ? object.count : nowIndex).c_str()); std::string oldFileName = UserDefault::getInstance()->getStringForKey(totalName.c_str(), ""); // 当前存在并且没有被使用则删除 if (!WJUtils::equals(oldFileName.c_str(), "")) { std::string fullpath = GameManager::getAtlasSavePath() + oldFileName; if (WJUtils::fileExists(fullpath.c_str())) FileUtils::getInstance()->removeFile(fullpath); } } else { totalName.append(WJUtils::stringAddInt("", nowIndex == 0 ? object.count : nowIndex).c_str()); } // 保存当前diy的序列 UserDefault::getInstance()->setStringForKey(totalName.c_str(), fileName); UserDefault::getInstance()->flush(); // 记录当前保存的diy的key m_diySaveKey = totalName; // 保存当前diy类别的总的个数 UserDefault::getInstance()->setIntegerForKey(sumName.c_str(), sum + 1 + exitUsed); UserDefault::getInstance()->flush(); } return result; }