怎么把数据传到另外一个场景里面

image
我有两个场景,Game场景是点击开始场景,player场景是游戏场景,在player场景里面的捡到的金币数,怎么传到Game场景里面来,我要用来升级道具。
请教一下,各位大神。

这个游戏数据用最好用一个单例对象, 改变都用 EventTarget

请问,可以教一下怎么写吗,不是很明白

写个单独的 脚本 啊, 两个场景的脚本都import他 数据不就互通了

兄弟 快去用3D 忠言相告

常驻节点 + 单例

一个没有什么设计思想的路子:js的话直接放到cc全局下

不知道能不能满足你的需求

loadScene(name, data) {
cc.director.on(cc.Director.EVENT_BEFORE_SCENE_LAUNCH, (scene) => {
scene.CustomData = data;
});
cc.director.loadScene(name);
},

getSceneData() {
return cc.director.getScene().CustomData;
},

给你个例子;
定义游戏全局数据类Game.ts;

// Game.ts
export default class Game extends cc.EventTarget {

    /**
     * 单例实例
     */
    private static _instance : Game;

    /**
     * 单例获取函数
     */
    public static getInstance() : Game  {
        if(!Game._instance){
			Game._instance = new Game();
			window.game = Game._instance;
        }
        return Game._instance
    }

     // 定义游戏数据, any这里替换为你游戏需要的数据结构,我这里只做测试
     private _gameData:any={ test:1 };

     // 获得游戏数据, 这个应该是只读的方式获得游戏数据。感觉这样方便一点,如果每个数据都一个函数就太多了
     public getGameData(){
          return this._gameData;
     }

     // 游戏数据修改, 这里可以用set属性也可以用方法。这个是单个属性的修改
     public setTestValue(value:number){
           this._gameData.test = value;
           this.emit("update_test", value);
     }
}

然后,如果某个脚本对象,或者是组件脚本对象需要监听test变量改变 Test1.ts;

@ccclass
export default class Test1 extends cc.Component{
    onLoad(){
       // 监听游戏 test 的改变
       Game.getInstance().on("update_test",(value:number)=>{
             console.log("数据改变为:",value);
       }); 
   }
}

然后,如果有脚本对象需要修改test变量Test2.ts;

@ccclass
export default class Test2 extends cc.Component{
    onLoad(){
        // 改变游戏的 test 数据
       Game.getInstance().setTestValue(123);
    }
}

好了, 这差不多就是一个完整的流程了。

1赞

按照模块划分脚本呀
就比如道具 有一个 ItemModel类去管理数据
ItemModel里面有一个获取等级的方法

getItemLevelById(itemId: number): IItemRuntime {
        // todo
}

在需要使用的视图层去使用

let item = singleton(ItemModel).getItemLevelById(10001);
let level = item.level;

大概就是这样 找一个专门的数据类 去管理

写一个全局模块,用于数据存储,在游戏开始的时候初始化。切换scene的时候把要传的数据存在这个q全局模块里面,等你场景切换完成,去全局模块里面取

用常驻节点

说用常驻节点的是不是疯了… …

弄全局吧 变量前面加个window.

常驻节点有什么坑吗

他的需求是数据保存。关常驻节点什么事。。。
单例数据中心DataCenter{
userInfo:UserInfo; //用户信息
shopInfo:ShopInfo; //商城信息
taskInfo:TaskInfo; //任务信息
bagInfo:BagInfo; //背包信息

}

在场景1拾取 DataCenter.ins.userInfo.money += 1;
在场景2使用 DataCenter.ins.userInfo.money

全局就可以比如image 这样

常驻节点挂上管理脚本和数据脚本

。。。。。

有什么问题