Пример #1
0
void TextureBlur::create(Texture2D* target, const int radius, const std::string& fileName, std::function<void()> callback, const int step)
{
    CCASSERT(target != nullptr, "Null pointer passed as a texture to blur");
    CCASSERT(radius <= maxRadius, "Blur radius is too big");
    CCASSERT(radius > 0, "Blur radius is too small");
    CCASSERT(!fileName.empty(), "File name can not be empty");
    CCASSERT(step <= radius/2 + 1 , "Step is too big");
    CCASSERT(step > 0 , "Step is too small");
    
	Size textureSize = target->getContentSize();
    Vec2 pixelSize = Vec2(float(step)/textureSize.width, float(step)/textureSize.height);
    int radiusWithStep = radius/step;
    
    float* weights = new float[maxRadius];
    calculateGaussianWeights(radiusWithStep, weights);
    
    Sprite* stepX = CCSprite::createWithTexture(target);
    stepX->retain();
    stepX->setPosition(Point(0.5f*textureSize.width, 0.5f*textureSize.height));
    stepX->setFlippedY(true);
    
    GLProgram* blurX = getBlurShader(pixelSize, Vec2(1.0f, 0.0f), radiusWithStep, weights);
    stepX->setGLProgram(blurX);
    
    RenderTexture* rtX = RenderTexture::create(textureSize.width, textureSize.height);
    rtX->retain();
    rtX->begin();
    stepX->visit();
    rtX->end();
    
    Sprite* stepY = CCSprite::createWithTexture(rtX->getSprite()->getTexture());
    stepY->retain();
    stepY->setPosition(Point(0.5f*textureSize.width, 0.5f*textureSize.height));
    stepY->setFlippedY(true);
    
    GLProgram* blurY = getBlurShader(pixelSize, Vec2(0.0f, 1.0f), radiusWithStep, weights);
    stepY->setGLProgram(blurY);
    
    RenderTexture* rtY = RenderTexture::create(textureSize.width, textureSize.height);
    rtY->retain();
    rtY->begin();
    stepY->visit();
    rtY->end();
    
	auto completionCallback = [rtX, rtY, stepX, stepY, callback](RenderTexture* rt, const std::string& filename)
	{
        stepX->release();
        stepY->release();
        rtX->release();
        rtY->release();
        callback();
    };
	
    rtY->saveToFile(fileName, true, completionCallback);
}
Пример #2
0
void GameLayer::update(float a)
{
	positon = hero->getPosition();
	if (positon.x > mapSize.width - winSize.width / 2 - 60)
	{
		hero->setState(eNormalRight);
		isRightKeyDown = false;
	}
	mapRun(positon);
	freshScore(positon);
	if (isDead)
	{
		CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
		CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects();

		RenderTexture* renderTexture = RenderTexture::create(WINSIZE.width, WINSIZE.height);
		renderTexture->retain();
		Scene *s = Director::getInstance()->getRunningScene();
		renderTexture->begin();
		s->visit();
		renderTexture->end();
		Scene* scene = OverDialog::createScene(renderTexture, true);
		Director::getInstance()->pushScene(scene);
	}

	
	if (isRightKeyDown)
	{
		positon.x += hero->runSpeed;
	}

	if (isLeftKeyDown)
	{
		positon.x -= hero->runSpeed;
	}

	hero->upSpeed -= hero->gravity - hero->groundSurport;
	positon.y += hero->upSpeed;

	if (positon.y < 5)
	{
		isDead = true;
	}
	if (positon.y > 450)
		positon.y = 450;
	if (positon.y > mapSize.height - 48)
	{
		positon.y = mapSize.height - 48;
	}
	hero->setPosition(positon);
	collisionV();
	collisionH();
}
Пример #3
0
	virtual bool init() override
	{
		Size size = Director::getInstance()->getVisibleSize();
		m_renderTexture = RenderTexture::create(size.width, size.height);
		if (!m_renderTexture)
			return false;
		m_renderTexture->retain();
		m_renderTexture->setKeepMatrix(true);
		m_renderTexture->setAnchorPoint(Vec2::ZERO);
		m_renderTexture->getSprite()->setAnchorPoint(Vec2::ZERO);
		return Node::init();
	}
std::string ProfileScreen::saveScreenshot() const {
    Size screen = Director::getInstance()->getWinSize();
    
    RenderTexture *tex = RenderTexture::create(int(screen.width), int(screen.height));
    tex->retain();
    
    tex->setPosition(Vec2(screen.width/2.0f, screen.height/2.0f));
    
    tex->begin();
    Director::getInstance()->getRunningScene()->visit();
    tex->end();
    
    __String *path = __String::createWithFormat("%s%d.png", "screenshot_", int(time(0)));
    tex->saveToFile(path->getCString(), Image::Format::PNG);
    
    return FileUtils::getInstance()->getWritablePath() + path->getCString();
}
Пример #5
0
void GameLayer::pauseCallback(Ref* node)
{
	isRightKeyDown = false;
	isLeftKeyDown = false;
	isSpaceKeyDown = false;
	hero->setState(eNormalRight);

	CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects();
	CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
	RenderTexture* renderTexture = RenderTexture::create(WINSIZE.width, WINSIZE.height);
	renderTexture->retain();
	Scene *s = Director::sharedDirector()->getRunningScene();
	renderTexture->begin();
	s->visit();
	renderTexture->end();
	Scene* pause = PauseDialog::createScene(renderTexture, true);
	Director::getInstance()->pushScene(pause);
}
Пример #6
0
bool MapRender::initRenderTexture()
{
	// create a render texture, this is what we are going to draw into
	int perWidth = WIDTH / MAX_TEX_X;
	int perHeight = HEIGHT / MAX_TEX_Y;
	for (size_t i = 0; i < MAX_TEX_X; i++)
	{
		for (size_t j = 0; j < MAX_TEX_Y; j++)
		{
			RenderTexture* renderTexture = RenderTexture::create(perWidth, perHeight, Texture2D::PixelFormat::RGBA8888);
			renderTexture->retain();
			renderTexture->setPosition(cocos2d::Vec2(perWidth / 2 + i * perWidth, perHeight / 2 + j * perHeight));

			this->addChild(renderTexture);
			_renderTexture[i][j] = renderTexture;
		}
	}
	return true;
}
Пример #7
0
bool ShopLayer::init(Ref* pSender, SHOP_TYPE TYPE){
    if (!Layer::init()) {
        return false;
    }
    auto winSize = Director::getInstance()->getWinSize();
    auto visibleSize = Director::getInstance()->getVisibleSize();
    auto Origin = Director::getInstance()->getVisibleOrigin();
  
    controllNode = Node::create();
    this->addChild(controllNode,1);
    
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui_shop.plist");
 
    
    auto ShopBg = Sprite::createWithSpriteFrameName("shop_bg.png");
    ShopBg->setAnchorPoint(Point::ANCHOR_MIDDLE_RIGHT);
    ShopBg->setPosition(Point(winSize.width,Origin.y+visibleSize.height/2));
    controllNode->addChild(ShopBg,0);
    
    m_shopGiftLayer = shopGiftLayer::create();
    m_shopGiftLayer->setPosition(Point::ZERO);
    m_shopGiftLayer->setVisible(false);
    
    m_shopPowerLayer = shopPowerLayer::create();
    m_shopPowerLayer->setPosition(Point::ZERO);
    m_shopPowerLayer->setVisible(false);
    
    m_shopTipLayer = shopTipLayer::create();
    m_shopTipLayer->setPosition(Point::ZERO);
    m_shopTipLayer->setVisible(false);
    
    controllNode->addChild(m_shopTipLayer,2);
    controllNode->addChild(m_shopPowerLayer,2);
    controllNode->addChild(m_shopGiftLayer,2);
    
    auto giftBtn2 = MenuItemSprite::create(Sprite::createWithSpriteFrameName("shop_tab_gift1.png"),
                                           Sprite::createWithSpriteFrameName("shop_tab_gift1.png"),
                                           CC_CALLBACK_0(ShopLayer::changeToGiftCallFunc, this));
    
    giftBtn2->setAnchorPoint(Point::ANCHOR_MIDDLE_RIGHT);
    giftBtn2->setPosition(Point(winSize.width-508,winSize.height/2+100));
    
    auto powerBtn2 = MenuItemSprite::create(Sprite::createWithSpriteFrameName("shop_tab_energy1.png"),
                                           Sprite::createWithSpriteFrameName("shop_tab_energy1.png"),
                                           CC_CALLBACK_0(ShopLayer::changeToPowerCallFunc, this));
    
    powerBtn2->setAnchorPoint(Point::ANCHOR_MIDDLE_RIGHT);
    powerBtn2->setPosition(Point(winSize.width-508,winSize.height/2));

    auto tipBtn2 = MenuItemSprite::create(Sprite::createWithSpriteFrameName("shop_tab_tip1.png"),
                                           Sprite::createWithSpriteFrameName("shop_tab_tip1.png"),
                                           CC_CALLBACK_0(ShopLayer::changeTpTipCallFunc, this));
    
    tipBtn2->setAnchorPoint(Point::ANCHOR_MIDDLE_RIGHT);
    tipBtn2->setPosition(Point(winSize.width-508,winSize.height/2-100));
    

    
    auto menu = Menu::create(giftBtn2,powerBtn2,tipBtn2,NULL);
    menu->setPosition(Point::ZERO);
    controllNode->addChild(menu,1);
    
    SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui_common.plist");
    auto closeBtn = MenuItemSprite::create(Sprite::createWithSpriteFrameName("common_btn_close.png"),
                                           Sprite::createWithSpriteFrameName("common_btn_close.png"),
                                           CC_CALLBACK_0(ShopLayer::pushLayer, this));
    
    CCLOG("asfasfasdfasdfadsf");
    //closeBtn->setAnchorPoint(Point::ANCHOR_MIDDLE_RIGHT);
    closeBtn->setPosition(Point(winSize.width-150,
                                       winSize.height/2+200));
    
    auto frontMenu = Menu::create(closeBtn, NULL);
    frontMenu->setPosition(Point::ZERO);
    controllNode->addChild(frontMenu, 9);
    
    
    
    
    switch (TYPE) {
        case SHOP_TYPE_GOLD:
            break;
            m_shopGiftLayer->setVisible(true);
            case SHOP_TYPE_POWER:
            m_shopPowerLayer->setVisible(true);
            break;
            case SHOP_TYPE_TIP:
            m_shopTipLayer->setVisible(true);
            break;
        case SHOP_TYPE_WITHOUTTIP:
            m_shopGiftLayer->setVisible(true);
            tipBtn2->setVisible(false);
    }
    
    
    controllNode->setPosition(Origin+Point(visibleSize.width/2,visibleSize.height+100));
    
	//截图
	RenderTexture* renderTexture = RenderTexture::create(winSize.width, winSize.height);
	renderTexture->retain();
	Scene *runningScene = CCDirector::getInstance()->getRunningScene();
	renderTexture->begin();
	runningScene->visit();
	renderTexture->end();
	//下面这句用来测试截图是否成功,经测试成功
	//renderTexture->saveToFile("123.png", Image::Format::PNG);
    
	//将截到的图做背景
	Sprite *_spr = Sprite::createWithTexture(renderTexture->getSprite()->getTexture());
	_spr->setPosition(Point(winSize.width / 2, winSize.height / 2));
	_spr->setFlippedY(true);  //翻转
	_spr->setColor(Color3B::GRAY);  //颜色(变灰暗)
	this->addChild(_spr, 0, BGTAG);
    
    auto moveTo = MoveTo::create(0.5f, Point::ZERO);
    
	auto easeBackInOut = EaseBackInOut::create(moveTo);
    //auto pasueAction = Sequence::create(easeBackInOut,CallFunc::create(CC_CALLBACK_0(ShopLayer::pauseCallFunc, this)), NULL);
    controllNode->runAction(easeBackInOut);
    
    return true;
}