CocosCreator2.4.15版本中,我想做一个可以不管切换任何场景都挂载到Canvas中的组件,目前的做法是先把一个Node放到Canvas中,在切换场景之前把Canvas中的Node挪到addPersistRootNode中,在下一个场景再挪回来,现在的问题是当我从Canvas挪出来然后再放到Canvas中的时候节点中的点击事件就接受不到了,下面是一个能复现的代码
let tagNode = new cc.Node(“QGLayer”);
tagNode.setPosition(0, 0);
let texture = new cc.Texture2D();
let spriteFrame = new cc.SpriteFrame();
texture.initWithData(
new Uint8Array([0, 0, 0]),
cc.Texture2D.PixelFormat.RGB888,
1,
1,
cc.size(100, 100)
);
spriteFrame.setTexture(texture);
spriteFrame.setRect(cc.rect(0, 0, 100, 100));
let iconParent = new cc.Node();
iconParent.setPosition(100, 500);
iconParent.setAnchorPoint(0, 0);
iconParent.active = true;
let rootNode = new cc.Node();
rootNode.setPosition(0, 0);
rootNode.setContentSize(100, 100);
rootNode.setAnchorPoint(0, 0);
iconParent.addChild(rootNode);
let sp = rootNode.addComponent(cc.Sprite);
sp.opacity = 120;
sp.spriteFrame = spriteFrame;
rootNode.active = true;
rootNode.on(cc.Node.EventType.TOUCH_END, function (event) {
console.log("****** >>touchRootNode");
event.stopPropagation();
}, null, true);
tagNode.addChild(iconParent);
cc.find("Canvas").addChild(tagNode);
setTimeout(() => {
// 从 Canvas 移除并设为常驻节点
tagNode.active = false;
tagNode.removeFromParent();
cc.game.addPersistRootNode(tagNode);
cc.director.loadScene("game2");
setTimeout(() => {
console.log("****** >>loadScene after scene switch");
tagNode.removeFromParent();
cc.find("Canvas").addChild(tagNode);
tagNode.active = true;
}, 1000);
}, 1000);
});