有A,B两场景,从场景A到B场景,在B场景音乐播放完了,我就通过
CCNotificationCenter::sharedNotificationCenter()->postNotification("Time", NULL);发送一个消息(这个发送消息的是在音乐的管理类里面的)
B场景就通过
CCNotificationCenter::sharedNotificationCenter()->addObserver(this, callfuncO_selector(CGameScene::TimeOutMsg), "Time", NULL); // 这放在了INIT方法里
接收消息后,就调用一个方法,这方法大概就是
void TimeOutMsg()
{
CCSprite *sp1 = CCSprite::create("myLight_1.png"); 一个精灵
CCRotateTo *rotate1 = CCRotateTo::create(1.5f, 180);一个动作
sp1->runAction((rotate1));
this->addChild(sp1);
}
跑完这些动作,返回到A场景,
然后又从A场景进入B场景,再做一次这些动作,
但这次跑到this->addChild(sp1);就出错了
这样一个错误,大概是内存冲突什么的,想不明白为什么,我的精灵跟动作都是局部的,按道理,返回A这些变量就回收了,后来我还特意在析构加了this->removeAllChildrenWithCleanup(true);看是不是这类问题,结果还是报错。
再之后 我把这个 CCSprite *sp1改为成员变量, 不行,
再再之后,我先到构造函数 初始化成员变量
sp1 = CCSprite::create("myLight_1.png");
this->addChild(sp1);
结束时在TimeOutMsg方法
CCSprite *csp1 = (CCSprite*)this->getChildByTag(101); 这样把对象取回来再RUNACTION也是会出错。
实在想不出什么问题了,求帮忙。