Пример #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 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();
    
}
Пример #3
0
Sprite* Utils::maskedSpriteWithSprite(Sprite* textureSprite, Sprite* maskSprite)
{
    // 1
    RenderTexture * rt = RenderTexture::create( maskSprite->getContentSize().width,
                                               maskSprite->getContentSize().height );
    
    // 2
    maskSprite->setPosition(maskSprite->getContentSize().width/2,
                            maskSprite->getContentSize().height/2);
    textureSprite->setPosition(textureSprite->getContentSize().width/2,
                               textureSprite->getContentSize().height/2);
    
    // 3
    maskSprite->setBlendFunc( BlendFunc{GL_ONE, GL_ZERO} );
    textureSprite->setBlendFunc( BlendFunc{GL_DST_ALPHA, GL_ZERO} );
    
    // 4
    rt->begin();
    maskSprite->visit();
    textureSprite->visit();
    rt->end();
    
    // 5
    Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
    retval->setFlippedY(true);
    return retval;
}
Пример #4
0
void ClippingToRenderTextureTest::reproduceBug()
{
    auto director = Director::getInstance();
    Size visibleSize = director->getVisibleSize();
    Point origin = director->getVisibleOrigin();


    // add "HelloWorld" splash screen"
    auto sprite = Sprite::create("Images/grossini.png");

    // position the sprite on the center of the screen
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);


    // container node that will contain the clippingNode
    auto container = Node::create();
    container->retain();

    auto stencil = DrawNode::create();
    Point triangle[3];
    triangle[0] = Point(-50, -50);
    triangle[1] = Point(50, -50);
    triangle[2] = Point(0, 50);
    Color4F green(0, 1, 0, 1);
    stencil->drawPolygon(triangle, 3, green, 0, green);

    auto clipper = ClippingNode::create();
    clipper->setAnchorPoint(Point(0.5, 0.5));
    clipper->setPosition( Point(visibleSize.width/2, visibleSize.height/2) );
    clipper->setStencil(stencil);
    clipper->setInverted(true);
    container->addChild(clipper, 1);


    auto img = DrawNode::create();
    triangle[0] = Point(-200, -200);
    triangle[1] = Point(200, -200);
    triangle[2] = Point(0, 200);
    Color4F red(1, 0, 0, 1);
    img->drawPolygon(triangle, 3, red, 0, red);
    clipper->addChild(img);

    // container rendered on Texture the size of the screen and because Clipping node use stencil buffer so we need to
    // create RenderTexture with depthStencil format parameter
    RenderTexture* rt = RenderTexture::create(visibleSize.width, visibleSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8);
    rt->setPosition(visibleSize.width/2, visibleSize.height/2);
    this->addChild(rt);

    rt->begin();
    container->visit();
    rt->end();
}
Пример #5
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();
}
Пример #6
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);
}
Пример #7
0
void EndlessScene::pauseCallback(Ref* pSender)
{
	//遍历当前类的所有子节点信息,画入renderTexture中。  
	//这里类似截图。  
	Size visibleSize = Director::getInstance()->getVisibleSize();
	RenderTexture *renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height + 30);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto scene = EndlessPauseScene::createScene(renderTexture, m_player->totalMoneyNum());
	Director::sharedDirector()->pushScene(scene);

	AudioControl::stopBGMusic();
}
Пример #8
0
void StartScene::toHelp(){
	auto director = Director::getInstance();
	RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto scene = pausePopup::createScene(renderTexture, "images/popupBg1.png");
	auto layer = pausePopup::create(renderTexture, "images/popupBg1.png");
	scene->addChild(layer, 1);

	layer->contentText = Label::createWithTTF("游戏介绍", "fonts/msyhbd.ttc", 20);
	layer->contentText->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 20 * 18);
	layer->menuSprite->addChild(layer->contentText);

	std::string str = "这是一款横版过关类游戏\n";
	str = str + "在游戏中你可以使用各种酷炫的技能消灭敌人,\n拾取强化道具,\n最后干掉boss,通过关卡!\n";
	str = str + "基本操作:\nW:跳\nD:前进(向右)\nA:后退(向左)\n点击右侧技能栏选择攻击技能\n";
	str = str + "点击屏幕进行攻击\n现在就开始你的战斗之旅吧!\n";

	auto infoLabel = Label::createWithTTF(str, "fonts/msyhbd.ttc", 20);
	infoLabel->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 20 * 19-infoLabel->getContentSize().width/2);
	layer->menuSprite->addChild(infoLabel);

	auto backLabel = Label::createWithTTF("返回游戏", "fonts/msyhbd.ttc", 15);
	backLabel->setColor(Color3B::BLACK);
	auto backItem = MenuItemLabel::create(backLabel, CC_CALLBACK_0(pausePopup::backToGame, layer));
	backItem->setPosition(backItem->getContentSize().width * 3 / 2, 0);

	layer->menu = Menu::create(backItem, NULL);

	layer->menu->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 12);
	layer->menuSprite->addChild(layer->menu, 10);


	//auto popupScene = Popup::createScene(renderTexture,"images/popupBg.png");
	//auto popup = Popup::create("images/popupBg.png");
	//this->addChild(popup, 10);
	//Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f),
	//								ScaleTo::create(0.06f, 1.05f),
	//								ScaleTo::create(0.08f, 0.95f),
	//								ScaleTo::create(0.08f, 1.0f), NULL);
	//popup->runAction(popupAction);
	//Director::getInstance()->pause();
	director->pushScene(scene);
	//Director::getInstance()->replaceScene(popupScene);
}
Пример #9
0
void BasicLevelLayer::lose()
{
	//Node::pause();
	auto director = Director::getInstance();

	//创建CCRenderTexture,纹理画布大小为窗口大小(1136, 640)
	RenderTexture *renderTexture = RenderTexture::create(1136, 640);

	//遍历Game类的所有子节点信息,画入renderTexture中。
	//这里类似截图。
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	//将游戏界面暂停,压入场景堆栈。并切换到GamePause界面
	director->pushScene(LoseLayer::createScene(renderTexture));
}
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();
}
Пример #11
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());
}
Пример #12
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);
}
Пример #13
0
void StartScene::toHelp(){
	auto director = Director::getInstance();
	RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto popup = Popup::createScene(renderTexture,"images/popupBg.png");
	//this->addChild(popup, 10);
	//Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f),
	//	ScaleTo::create(0.06f, 1.05f),
	//	ScaleTo::create(0.08f, 0.95f),
	//	ScaleTo::create(0.08f, 1.0f), NULL);
	//popup->runAction(popupAction);
	director->pushScene(popup);
	auto str = String::create("±³¾°½éÉÜ£¬ÓÎÏ·²Ù×÷½éÉÜ");
	//popup->setContentText(str);
}
Пример #14
0
bool MapRender::doRenderTexture(maps::Map* mapa, const std::string& fileImage)
{
	vector<maps::Center *> centers = mapa->GetCenters();
	int perWidth = WIDTH / MAX_TEX_X;
	int perHeight = HEIGHT / MAX_TEX_Y;

	vector<maps::Center *> unitCenters[MAX_TEX_X][MAX_TEX_Y];
	vector<maps::Center *>::iterator center_iter = centers.begin();
	for (; center_iter != centers.end(); center_iter++)
	{
		int x = (*center_iter)->getRow() * maps::TILE_SIZE / perWidth;
		int y = (*center_iter)->getCol() * maps::TILE_SIZE / perHeight;
		unitCenters[x][y].push_back(*center_iter);
	}

	for (size_t i = 0; i < MAX_TEX_X; i++)
	{
		for (size_t j = 0; j < MAX_TEX_Y; j++)
		{
			RenderTexture* render = _renderTexture[i][j];
			// begin drawing to the render texture
			render->begin();

			vector<maps::Center *> curCenters = unitCenters[i][j];
			center_iter = curCenters.begin();
			for (; center_iter != curCenters.end(); center_iter++)
			{
				Sprite* tile = Sprite::create(fileImage, TERRAIN_TEXTURE[(int)(*center_iter)->getTerrain()]);

				tile->setPosition(cocos2d::Vec2((*center_iter)->getPosition().x - i * perWidth, (*center_iter)->getPosition().y - j * perHeight));
				tile->setAnchorPoint(cocos2d::Vec2::ZERO);

				tile->visit();
			}


			// finish drawing and return context back to the screen
			render->end();
		}
	}

	return true;
}
Пример #15
0
void ControlSwitchSprite::needsLayout()
{
    _onSprite->setPosition(Point(_onSprite->getContentSize().width / 2 + _sliderXPosition,
        _onSprite->getContentSize().height / 2));
    _offSprite->setPosition(Point(_onSprite->getContentSize().width + _offSprite->getContentSize().width / 2 + _sliderXPosition, 
        _offSprite->getContentSize().height / 2));
    _thumbSprite->setPosition(Point(_onSprite->getContentSize().width + _sliderXPosition,
        _maskTexture->getContentSize().height / 2));

    if (_onLabel)
    {
        _onLabel->setPosition(Point(_onSprite->getPosition().x - _thumbSprite->getContentSize().width / 6,
            _onSprite->getContentSize().height / 2));
    }
    if (_offLabel)
    {
        _offLabel->setPosition(Point(_offSprite->getPosition().x + _thumbSprite->getContentSize().width / 6,
            _offSprite->getContentSize().height / 2));
    }

    RenderTexture *rt = RenderTexture::create((int)_maskTexture->getContentSize().width, (int)_maskTexture->getContentSize().height);

    rt->begin();
    _onSprite->visit();
    _offSprite->visit();

    if (_onLabel)
    {
        _onLabel->visit();
    }
    if (_offLabel)
    {
        _offLabel->visit();
    }

    rt->end();

    setTexture(rt->getSprite()->getTexture());
    setFlippedY(true);
}
Пример #16
0
Sprite* PhotoLayer::mask()
{
    assert(this->userHead);

    float uiSacle = 0.38f;
    uiSacle = 1;
    Sprite* userHeadSprite = (Sprite*)userHead->getVirtualRenderer();
    Sprite* textureSprite = Sprite::createWithSpriteFrame(userHeadSprite->getSpriteFrame());
    Point userHeadPos = Node::convertToWorldSpaceAR(this->userHead->getPosition());
    Point texturePosition = this->convertToNodeSpace(userHeadPos);
    textureSprite->setPosition(texturePosition);
    textureSprite->setScale(mscale * uiSacle);
    textureSprite->setRotation(this->userHead->getRotation());
    
    Sprite* maskSprite = Sprite::create("face/mask.png");
    maskSprite->setPosition(Point(512, 384));
    // 这里是为了适配动画里的骨骼大小,大概是114*121,UI层就做放大处理了。
    maskSprite->setScale(uiSacle);

    // Size size = Director::getInstance()->getVisibleSize();
    Size size = Director::getInstance()->getWinSize();
    RenderTexture* rt = RenderTexture::create(size.width, size.height, Texture2D::PixelFormat::RGBA8888);
    
    BlendFunc maskBlendFunc = { GL_ONE, GL_ZERO };
    maskSprite->setBlendFunc(maskBlendFunc);
    BlendFunc textureBlendFunc = { GL_DST_ALPHA, GL_ZERO };
    textureSprite->setBlendFunc(textureBlendFunc);
    
    rt->begin();
    maskSprite->visit();
    textureSprite->visit();
    rt->end();
    
    Sprite* retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
    return retval;
}
Пример #17
0
void StartScene::toSetting(){
	auto director = Director::getInstance();
	RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto scene = pausePopup::createScene(renderTexture, "images/popupBg1.png");
	auto layer = pausePopup::create(renderTexture, "images/popupBg1.png");
	scene->addChild(layer, 1);

	layer->contentText = Label::createWithTTF("游戏设置", "fonts/msyhbd.ttc", 20);
	layer->contentText->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 5 * 4);
	layer->menuSprite->addChild(layer->contentText);

	auto musicSetting = Label::createWithTTF("音量设置", "fonts/msyhbd.ttc", 15);
	musicSetting->setPosition(layer->menuSprite->getContentSize().width / 3, layer->menuSprite->getContentSize().height / 5 * 3);
	layer->menuSprite->addChild(musicSetting);

	slider = ControlSlider::create("images/slider/slider1.png","images/slider/slider0.png","images/slider/slider2.png");
	slider->setPosition(layer->menuSprite->getContentSize().width / 3*2, layer->menuSprite->getContentSize().height / 5 * 3);
	slider->setMinimumValue(0.0f);
	slider->setMaximumValue(100.0f);

	auto initValue = 50.0f;
	if (database->getBoolForKey("isExit")) initValue = database->getFloatForKey("music");

	slider->setValue(initValue);
	slider->addTargetWithActionForControlEvents(this, cccontrol_selector(StartScene::musicSlider), Control::EventType::VALUE_CHANGED);
	layer->menuSprite->addChild(slider);

	auto resetLabel = Label::createWithTTF("重置游戏", "fonts/msyhbd.ttc", 15);
	MenuItemLabel* resetItem = MenuItemLabel::create(resetLabel, CC_CALLBACK_0(StartScene::resetGame,this));
	resetItem->setPosition(0, 0);
	auto resetMenu = Menu::create(resetItem,NULL);
	resetMenu->setPosition(layer->menuSprite->getContentSize().width / 3, layer->menuSprite->getContentSize().height / 5 * 2);
	layer->menuSprite->addChild(resetMenu);
	
	auto backLabel = Label::createWithTTF("返回游戏", "fonts/msyhbd.ttc", 15);
	backLabel->setColor(Color3B::BLACK);
	auto backItem = MenuItemLabel::create(backLabel, CC_CALLBACK_0(pausePopup::backToGame, layer));
	backItem->setPosition(backItem->getContentSize().width * 3 / 2, 0);

	layer->menu = Menu::create(backItem, NULL);

	layer->menu->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 12);
	layer->menuSprite->addChild(layer->menu, 10);


	//auto popupScene = Popup::createScene(renderTexture,"images/popupBg.png");
	//auto popup = Popup::create("images/popupBg.png");
	//this->addChild(popup, 10);
	//Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f),
	//								ScaleTo::create(0.06f, 1.05f),
	//								ScaleTo::create(0.08f, 0.95f),
	//								ScaleTo::create(0.08f, 1.0f), NULL);
	//popup->runAction(popupAction);
	//Director::getInstance()->pause();
	director->pushScene(scene);
	//Director::getInstance()->replaceScene(popupScene);
}
Пример #18
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;
}
Пример #19
0
void TransitionCrossFade::onEnter()
{
    TransitionScene::onEnter();

    // create a transparent color layer
    // in which we are going to add our rendertextures
    Color4B  color(0,0,0,0);
    Size size = _director->getWinSize();
    LayerColor* layer = LayerColor::create(color);

    // create the first render texture for inScene
    RenderTexture* inTexture = RenderTexture::create((int)size.width, (int)size.height,Texture2D::PixelFormat::RGBA8888,GL_DEPTH24_STENCIL8);

    if (nullptr == inTexture)
    {
        return;
    }

    inTexture->getSprite()->setAnchorPoint( Vec2::ANCHOR_MIDDLE );
    inTexture->setPosition(size.width/2, size.height/2);
    inTexture->setAnchorPoint( Vec2::ANCHOR_MIDDLE );

    // render inScene to its texturebuffer
    inTexture->begin();
    _inScene->visit();
    inTexture->end();

    // create the second render texture for outScene
    RenderTexture* outTexture = RenderTexture::create((int)size.width, (int)size.height,Texture2D::PixelFormat::RGBA8888,GL_DEPTH24_STENCIL8);
    outTexture->getSprite()->setAnchorPoint( Vec2::ANCHOR_MIDDLE );
    outTexture->setPosition(size.width/2, size.height/2);
    outTexture->setAnchorPoint( Vec2::ANCHOR_MIDDLE );

    // render outScene to its texturebuffer
    outTexture->begin();
    _outScene->visit();
    outTexture->end();

    // create blend functions

    BlendFunc blend1 = {GL_ONE, GL_ONE}; // inScene will lay on background and will not be used with alpha
    BlendFunc blend2 = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA}; // we are going to blend outScene via alpha

    // set blendfunctions
    inTexture->getSprite()->setBlendFunc(blend1);
    outTexture->getSprite()->setBlendFunc(blend2);

    // add render textures to the layer
    layer->addChild(inTexture);
    layer->addChild(outTexture);

    // initial opacity:
    inTexture->getSprite()->setOpacity(255);
    outTexture->getSprite()->setOpacity(255);

    // create the blend action
    Action* layerAction = Sequence::create
    (
        FadeTo::create(_duration, 0),
        CallFunc::create(CC_CALLBACK_0(TransitionScene::hideOutShowIn,this)),
        CallFunc::create(CC_CALLBACK_0(TransitionScene::finish,this)),
        nullptr
    );


    // run the blend action
    outTexture->getSprite()->runAction( layerAction );

    // add the layer (which contains our two rendertextures) to the scene
    addChild(layer, 2, kSceneFade);
}