最近在做小游戏的时候,遇到了进入result场景时候的传值问题。
场景加载传值,通过常驻节点实现。
在game_scene中添加常驻节点GameResultData空节点。
创建脚本GameResultData.ts,声明要传递的值的内容。
const {ccclass, property} = cc._decorator;
@ccclass
export default class GameResultData extends cc.Component {
gotStarScore: number = 0;
level: number = 1;
isWin: Boolean = false;
}
在game_scene绑定常驻节点。
// 常驻节点
@property(cc.Node)
gameResultDataNode: cc.Node = null;
在load方法中绑定常驻节点
onLoad() {
//添加dataNode为常驻节点
cc.game.addPersistRootNode(this.gameResultDataNode);
}
更新游戏结束后的状态值及得分
// 进入结果页面
enterGameResult(win) {
// 显示gameover
// 将常驻节点赋值
//设置dataNode要传递的数据
let gameResultData = this.gameResultDataNode.getComponent(GameResultData);
gameResultData.isWin = win;
gameResultData.gotStarScore = GameStateManager.instance().getScore();
gameResultData.level = this.currentLevelInfo['level'];
cc.director.loadScene("game_result");
}
最近进入结果场景的时候显示传递的值
onLoad () {
//从上一个场景的常驻节点上获取当前场景需要使用的参数
let gameDataResultNode = cc.director.getScene().getChildByName('GameResultData');
let gameResultData = gameDataResultNode.getComponent(GameResultData);
if (gameDataResultNode && gameResultData) {
this.scoreLabel.string = "" + gameResultData.gotStarScore;
this.levellabel.string = "第" + gameResultData.level + "关";
if (gameResultData.isWin) {
// 是否挑战成功
}
//取消一个节点的常驻属性
cc.game.removePersistRootNode(gameDataResultNode);
}
}
最后在取消一个节点的常驻属性
//取消一个节点的常驻属性
cc.game.removePersistRootNode(gameDataResultNode);
最后可以扫码看下效果。
搜索微信小游戏:战击长空
或者扫码查看