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); }
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(); }
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; }
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(); }
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(); }
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 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(); }
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); }
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(); }
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()); }
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); }
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); }
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; }
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); }
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; }
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); }
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; }
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); }