如何刷新精灵(删除并重新创建)
How to refresh sprites (remove and recreate it again)
我想在我的游戏中创建一个昼夜背景模式,我想在一个选项对话框中创建一个控制按钮,当我点击它时,所有的背景都改变而不退出对话框。我刚刚通过重新打开场景使其运行正常,但它也退出了选项对话框。
我有一个这样的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);
}
,我不知道如何刷新这些雪碧(删除,然后再次召回)。对不起,我的英语不好。任何帮助都会很感激。
根据我对你的问题的理解,你需要从场景中删除精灵并重新添加。
- CCNode/Sprite有这个方法removeFromParentAndCleanup(bool cleanup)
- 也可以删除CCNode/Sprite的所有子节点removeAllChildrenWithCleanup (bool清理)。
- Node/Sprite可以分配特殊的setTag(),稍后可以使用removeChildWithTag()删除特殊的Sprite。人们通常有枚举来识别关键元素。
我希望这能回答你的问题。
具有:http://www.cocos2d-x.org/reference/native-cpp/V2.2.3/d9/d1f/group__base__nodes.html ga5889948f4c40933e93aaf70cb8846192
最后找出我的问题,这是非常简单的,我可以通过使用mySprite->setTexture(CCTextureCache::sharedTextureCache()->addImage("newImage.png"));
改变精灵图像不再需要删除,然后再次添加。
相关文章:
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 如何使用CLion在Mac上创建一个新的.txt文件
- C++:继续创建新的变量可以吗
- 如何使用新运算符跟踪在循环中创建的 QLabel
- C++ 如何在将新对象分配给另一个对象时创建新对象
- C++ 警告:将新创建的 gsl::owner<> 分配给非所有者
- 重用对象与创建新对象
- C++,创建新对象时类的对象更改
- 将一个 QWidget 链接到另一个新创建的 QWidget
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- cout 新创建的对象引发运行时错误
- 使用新运算符C++创建多维数组的简单方法
- C 矢量元素擦除与新向量创建
- 如何使用安置新操作员创建对象数组
- 我如何在参考上使用数据成员而不使用新关键字创建对象
- 通过使用新操作员创建对象会导致未解决的外部符号错误C FTGL
- 使用新关键字创建的C 对象不会呈现;在堆栈上创建的对象确实可以
- 将 QFile::copy 创建创建文件的副本或将内容从一个文件移动到另一个文件
- 部分模板绑定,将新模板创建为类型
- 管理用新char*创建但用自定义分配器分配给std::vector元素的内存块