我有两个场景,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);
}
}
好了, 这差不多就是一个完整的流程了。
按照模块划分脚本呀
就比如道具 有一个 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
全局就可以比如 这样
常驻节点挂上管理脚本和数据脚本
。。。。。
有什么问题