Java:访问资源和德墨忒耳定律
概述
在我的(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);
}
}
因此,在我的主菜单场景中,我需要访问我的对象,因此我们可能会看到如下内容:
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多个对象的引用传递到构造函数中,这听起来不太对......
因此,如果有人能指出最好的方法和原因,我将不胜感激。