LibGDX,我应该如何在Screen和Stage中组织代码?

时间:2015-07-18 22:16:42

标签: java android libgdx box2d

简短版本:请使用 box2d 将我链接到libgdx游戏的orginized代码,或者只是告诉我哪些成员参加哪些课程

长版本:我有一个带有GameStage对象的GameScreen。然而,当我开发游戏时,我发现GameStage有很多代码,而GameScreen几乎是空的。 最初我将相机和视口放在 GameScreen 中,但就是这样。

private Jumper              game;
private GameStage           stage;
private OrthographicCamera  camera;
private FitViewport         viewport;

以下是 GameStage 中的成员:

public  World               world;
private Ground              ground;
private Player              player;
private float               accumulator = 0f;
private Vector3             touch = new Vector3();
private Rectangle           rightSide;
private Rectangle           leftSide;
private Queue<Platform>     platforms;
private int                 score;
private OrthographicCamera  camera;
private Box2DDebugRenderer  debugRenderer;
private FitViewport         viewport;

这对我来说并不是那么糟糕,但是我只是在原型构建中并且还有更多的机制需要添加,我相信它最终会像我之前的游戏一样(50多个成员) ,并且拥有如此多的代码,我每次都会迷失它

游戏拥有如此多的代码是否正常?或者有没有办法优化这个?

PS:这是我的班级结构:http://i.stack.imgur.com/8uYgA.png

1 个答案:

答案 0 :(得分:1)

我正在制作Box2D游戏,组织是我的一个大问题。在游戏中,您需要管理很多事情。相机,游戏逻辑,移动实体等。为了让所有人一起工作,我开始使用我称之为处理程序的东西。这些处理程序将处理游戏的特定方面。这允许我保持摄像机代码远离Box2D代码。

对于我正在进行的项目,我在“Universe”课程中有五个处理程序:

public WorldHandler world_handler;
public MapCameraHandler map_camera_handler;
public EntityHandler entity_handler;
public LevelHandler level_handler;
public WaveHandler wave_handler;

当我初始化它们时,我将对此Universe类的引用传递给它们的构造函数,以便处理程序可以相互通信。然后,在我的更新步骤中,我单独调用每个处理程序的更新。

public void update(float delta)
{
    world_handler.update(delta);
    entity_handler.update(delta);
    map_camera_handler.setCameraBounds();
    wave_handler.update();
}

我对绘制方法也这样做。

public void draw()
{
    map_camera_handler.map_renderer.setView(map_camera_handler);
    map_camera_handler.map_renderer.render();       
    entity_handler.draw();
}