Как обновить спрайты (удалить и воссоздать его снова)

Я пытаюсь создать дневной и ночной фоновый режим в своей игре, и я хочу создать управляющую кнопку в диалоговом окне параметров, чтобы при нажатии на нее весь фон менялся, не выходя из диалогового окна. Я только что заставил его работать нормально, заново открыв сцену, но он также закрыл диалог настроек.

у меня есть initBackground() такой метод

void MenuScene::initMenuBackground() {
setBackgroundMode();
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//calculate system hour time
time_t now = time(0);   // get time now
tm * ltm = localtime(&now);
double hour = ltm->tm_hour;
int curHourTime = (int) hour;
CCLOG("MenuScene hour is: %dh", curHourTime);
CCAnimation* caveAnim1 = CCAnimation::createWithSpriteFrames (senspark::Utils::createFramesArray("cave-%d.png", 3), 0.2f);
CCAnimation* caveAnim2 = CCAnimation::createWithSpriteFrames(senspark::Utils::createFramesArray("cave-%d.png", 3, 0, true), 0.2f);
cloudSpr->runAction(CCRepeatForever::create(CCSequence::create(CCMoveTo::create(30, ccp(winSize.width+100, cloudSpr->getPositionY())),
CCMoveTo::create(0, ccp(-100, cloudSpr->getPositionY())),
NULL)));
cloudNightSpr->runAction(CCRepeatForever::create(CCSequence::create(CCMoveTo::create(30, ccp(winSize.width+100, cloudSpr->getPositionY())),
CCMoveTo::create(0, ccp(-100, cloudSpr->getPositionY())),
NULL)));//night
if ( ((curHourTime < 6 || curHourTime > 18) && (_isAuto==true)) || _isNight==true) {
caveNightSpr->runAction(CCRepeatForever::create(CCSequence::create(CCAnimate::create(caveAnim1),
CCAnimate::create(caveAnim2),
CCDelayTime::create(0.2f),
NULL)));
cloudSpr->setVisible(false);
startGoldSpr->setVisible(false);
backgroundSpr->setVisible(false);
backgroundSkySpr->setVisible(false);
backgroundNightSpr->setScaleX(CCDirector::sharedDirector()->getWinSize().width/designSize.width);
backgroundSkyNightSpr->setScaleX(CCDirector::sharedDirector()->getWinSize().width/designSize.width);
}
//daytime
if ( ((curHourTime > 6 && curHourTime < 18) && (_isAuto==true)) || _isDay==true) {
caveSpr->runAction(CCRepeatForever::create(CCSequence::create(CCAnimate::create(caveAnim1),
CCAnimate::create(caveAnim2),
CCDelayTime::create(0.2f),
NULL)));
cloudNightSpr->setVisible(false);
startGoldNightSpr->setVisible(false);
backgroundNightSpr->setVisible(false);
backgroundSkyNightSpr->setVisible(false);
backgroundSpr->setScaleX(CCDirector::sharedDirector()->getWinSize().width/designSize.width);
backgroundSkySpr->setScaleX(CCDirector::sharedDirector()->getWinSize().width/designSize.width);
}

и я не знаю, как обновить эти спрайты (удалить, а затем вспомнить их снова).
Извините за мой плохой английский. Любая помощь будет оценена.

0

Решение

Из того, что я понимаю из вашего вопроса, вам нужно удалить спрайт со сцены и добавить его снова.

  1. CCNode / Sprite имеет этот метод removeFromParentAndCleanup (очистка bool)
  2. Также вы можете удалить все дочерние элементы из CCNode / Sprite с помощью
    removeAllChildrenWithCleanup (очистка bool).
  3. Узлу / Sprite может быть назначен специальный setTag (), который можно использовать позже для удаления специального Sprite с помощью removeChildWithTag (). У людей обычно есть перечисления, чтобы идентифицировать ключевые элементы.

Я надеюсь, что это отвечает на ваш вопрос.

Refrences:
http://www.cocos2d-x.org/reference/native-cpp/V2.2.3/d9/d1f/group__base__nodes.html#ga5889948f4c40933e93aaf70cb8846192

0

Другие решения

Наконец, выясните мою проблему, это очень просто, что я могу изменить изображение спрайта с помощью mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));

больше не нужно удалять, а затем добавить его снова.

0

По вопросам рекламы [email protected]