0

我正在尝试在我的游戏中创建一个昼夜背景模式,我想在一个选项对话框中创建一个控制按钮,当我点击它时,所有背景都会更改而不退出对话框。我刚刚通过重新打开场景使其运行正常,但它也退出了选项对话框。

我有这样的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);
}

而且我不知道如何刷新这些 Sprite(删除然后再次调用它们)。对不起,我的英语不好。任何帮助,将不胜感激。

4

2 回答 2

0

根据我从您的问题中了解到的情况,您需要从场景中删除精灵并再次添加它。

  1. CCNode/Sprite 有这个方法 removeFromParentAndCleanup(bool cleanup)
  2. 您也可以使用 removeAllChildrenWithCleanup(bool cleanup) 从 CCNode/Sprite 中删除所有子节点。
  3. 可以为节点/Sprite 分配特殊的 setTag(),以后可以使用 removeChildWithTag() 删除特殊的 Sprite。人们通常有枚举来识别关键元素。

我希望这能回答你的问题。

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

于 2014-07-15T06:57:26.407 回答
0

终于弄清楚我的问题,很简单,我可以通过使用mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png")); 不再需要删除然后重新添加来更改精灵图像。

于 2014-07-15T07:53:43.850 回答