在我的游戏中,我在gameObjects
中创建了Main
(其他类的实例,例如Player)的列表,我可以遍历并在一个函数中进行渲染,而不是渲染它们全部单独。这是我的渲染功能;
this.gameObjects = [];
addObj(obj){
this.gameObjects.push(obj);
}
render(){
this.gameObjects.forEach(obj => obj.render());
}
如果我想像这样使用我的主类添加另一个gameObject
,这没问题;
let main = new Main();
let player = new Player(10, 30, 10, 10, 'red');
main.addObject(player);
main.start();
但是,我想在我的gameObject
类中添加另一个Projectile
,称为Player
。问题是我的Player
类无法访问Main
的{{1}}函数。
我的想法是创建一个单例,其中包含一个游戏对象列表,像这样;
addObj
问题的tl:dr是;
答案 0 :(得分:1)
使用单例可能会使单元测试复杂化,并向应用程序的信息流添加隐藏状态。并不是说该模式本质上是有缺陷的,但是使用这种模式有对与错的方式,如果您不想花时间去理解该模式,那么最好不使用它。您的Singleton计划会奏效,但这不是最可靠的解决方案。
请注意,JS是一种功能语言。您不需要将main传递给每个类,只需传递addObject函数即可。这样,当您更改上下文时(例如在单元测试中,或者如果您要回收其他项目的代码),您将能够只切换传递的函数,并保留所有代码。