概述
在我的(Android)Java 游戏中,我有一个名为resources的类。顾名思义,这个类拥有游戏的资源。我所有的 OpenGL 对象(精灵)都是在这里创建的
它看起来像下面这样(显然,与实际项目中出现的版本相比,这是一个简化版本):
public class Resources {
Hero hero;
Enemy enemy;
MenuButtons mainMenuButtons;
Background background;
Scene mainMenu;
public void createObjects(){
hero = new Hero();
enemy = new Enemy();
mainMenuButtons = new MenuButtons();
background = new Background();
mainMenu = new Scene(this);
}
}
所以,在我的mainMenu场景中,我需要访问我的对象,所以我们可能会看到如下内容:
public class mainMenu implements Scene {
Resources resources;
public mainMenu(Resources resources){
this.resources = resources;
}
@Override
public void render(){
resources.background.draw();
resources.hero.draw();
resources.enemy.draw();
mainMenuButtons.draw();
}
@Override
public void updateLogic(){
resources.hero.move();
resources.enemy.move();
resources.mainMenubuttons.animate();
}
}
现在,上述方法只是访问资源中的对象 及其方法的一种方法。但这真的违反了得墨忒耳法则吗? 如果不是,为什么不呢?如果是这样,以不违反 LOD 的方式访问这些对象的最佳方法是什么?
访问者?
一种选择(我已经排除了 TBH - 见下文)是将访问器方法放入我的资源类中。这样我就可以做类似的事情:
resources.drawBackround();
我有很多对象,并且每个对象的每个方法/变量都需要一个访问器。不太实用,似乎我正在编写大量额外的代码,最重要的是,只要资源类充满了这些访问器,它就会变得荒谬。因此,我不会走这条路。
将对象传入场景的构造函数
当然,我也可以这样做:
hero = new Hero();
enemy = new Enemy();
mainMenuButtons = new MenuButtons();
background = new Background();
mainMenu = new Scene(hero, enemy, mainMenuButtons, background);
所以我可以简单地这样做:
background.draw(); //etc....
这对于简单场景(例如不需要大量对象的菜单系统)是可行的,但对于主游戏,它可能很快就会变得一团糟,因为我必须将对大约 30 多个对象的引用传递给构造函数确实听起来不太对......
因此,如果有人能指出最好的方法以及原因,我将不胜感激。