常驻节点场景切换回来后,动作停止

场景A中设置了一个常驻节点。代码如下
const { ccclass, property } = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {
@property({
type: cc.AudioClip
})
bgAudio: cc.AudioClip;
audioid;
playState: boolean = true;
action;
onLoad() {
cc.game.addPersistRootNode(this.node);
this.autoAudioPlay();
}
autoAudioPlay = () => {
this.audioid = cc.audioEngine.play(this.bgAudio, true, 1)
this.action = cc.repeatForever(cc.rotateBy(3, 360));
this.node.runAction(this.action);
}
playSwitch = () => {
if (this.playState) {
this.playState = false;
// 停止一个动作
this.node.stopAction(this.action);
cc.audioEngine.pause(this.audioid);
cc.loader.loadRes(“musicStop”, cc.SpriteFrame,(err, spriteFrame)=> {
this.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
} else {
this.playState = true;
// 执行动作
this.node.runAction(this.action);
cc.audioEngine.resume(this.audioid);
cc.loader.loadRes(“music”, cc.SpriteFrame,(err, spriteFrame)=> {
this.node.getComponent(cc.Sprite).spriteFrame = spriteFrame;
});
}
}
onDestroy() {

}

}
从场景A切换到场景B,再重场景B切换回场景A后,音乐图标的旋转动作停止了,但是音乐还在播放。请问这个是什么原因造成的

测试发现,只要不切换回A场景,切到其他场景都是正常的,切换到A场景就停止动作了。
cc.director.loadScene(“sceneA”);

常驻节点一般都是单例吧,你这好像没有判断是否已经实例化了。

提交这个问题的demo上来,请帮忙看看gameDemo.zip (1.5 MB)

这样改一下常驻节点的脚本。

1赞

我是2.0.8 ,测了半天发现cocos对常驻节点有特殊处理,A场景产生的常驻节点‘Node’,到B场景,再回到A场景,按理说回到A场景又会产生另一个‘Node’,需要销毁掉以保持‘Node’的唯一性,但是cocos已经帮你处理了,但是还是建议‘Node’用单例方式实现。回到A场景cocos处理常驻节点的时候,可能顺便把你‘Node’节点的Action给停止了,你可以试试用Animation来做动画。

cocos是自动处理了常驻节点么?

这样修改了,切换场景后,点停止,图标换了,音乐停了,但是动作停不下来了

请求帮助,demo上修改到enable里了。结果是场景切换后动作停不下来了

我也遇到同样的问题 常驻节点再跳回原来的场景时 动作会自动暂停 计时器不会出现这种情况