我正在开发一款游戏,我有一个全球性的save
变量,它包含游戏的各个方面(单位,升级等)。游戏代码分为几个模块,如升级或成就。如何创建一个可以在其他模块中编辑而不是全局变量的变量?
如何使save
变量在其他模块中可访问?导入给我一个只读的变量副本,这是没有用的。我怎样才能与其他模块共享变量而不使其成为全局变量?
我不是在寻找最简单的解决方案,我正在寻找最佳实践。
编辑:我正在使用ES6导入/导出功能。
我正在开发一款游戏,我有一个全球性的save
变量,它包含游戏的各个方面(单位,升级等)。游戏代码分为几个模块,如升级或成就。如何创建一个可以在其他模块中编辑而不是全局变量的变量?
如何使save
变量在其他模块中可访问?导入给我一个只读的变量副本,这是没有用的。我怎样才能与其他模块共享变量而不使其成为全局变量?
我不是在寻找最简单的解决方案,我正在寻找最佳实践。
编辑:我正在使用ES6导入/导出功能。
导入可能会给你一个只读的变量副本,但导入的对象不是不可变的。因此,如果你想分享各种各样的状态对象,多个模块可以写,你可以:
import saveState from './saveState';
saveState = { world: { } }; // Doesn't work
saveState.world = {}; // Does work
......不,我会倡导这样的模式(共享状态导致各种upredictability的)。最好有一个共享对象的方法,并让该对象保持内部状态。
老实说,对于视频游戏而言,我认为开放获取可能是最简单的。它可以很容易地检查诸如'if(saveState.world ['dragonChoice'] ==='SAVE'){dialog =“我听说你救了那条龙”。 }' – Katana314
如果您使用的是es6,则可以创建本地模块变量并仅导出实用程序函数以更改原始值。
// save-module.js
let Save = {
score: 0,
room: 'main'
}
export changeRoom(room){
Save.room = room;
}
export addScore(){
Save.score++;
}
export subtractScore(){
Save.score--;
}
export getSaveObject(){
return Save;
}
// other-module.js
import { changeRoom, addScore, subtractScore, getSaveObject } from './save-module';
// Do something here with the fns and it should update the Save variable
有没有一种更清晰的方式来实现这一点,当你有对象嵌套3层深? –
你可以看看[依赖注入](http://krasimirtsonev.com/blog/article/Dependency-injection-in-JavaScript)。 – byxor
Ajax +服务器端持久性? – Gar
@JamesThorpe我只是在问题中添加了一些额外的信息。道歉如此宽泛! –