概述
在我的(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+对象的引用传递到构造函数中,这听起来并不是很正确……
因此,如果有人能指出最好的继续进行的方式和原因,我将非常感激。
https://stackoverflow.com/questions/30716327
复制相似问题