Пример #1
0
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();
    
}
Пример #2
0
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);
}
Пример #3
0
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());
}
Пример #4
0
//-----------------------------------------保存图片-----------------------------------------------------------
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;
}