在LWJGL中组织代码

时间:2013-01-11 17:22:49

标签: java lwjgl

我正在制作一个简单的tic tac toe游戏作为LWJGL的练习。

当我编写方法来绘制棋盘方块和棋子(如x和o棋子)时,我应该将它们放在一个可以被各种对象(如棋盘)调用的graphicsLib类中吗?或者让每个对象包含绘制自己元素的代码是最佳做法?我希望尽可能扩展代码。

具体来说,我有一个Board类,它是Square类型的对象的集合,并且方形对象被分配了一个枚举状态CLEAR,X或O.然后我在一个调用相应的状态上运行一个switch语句。绘制正方形的方法。我应该将每个方法放在它自己的对象中还是有一个大型图形对象(比如公共类graphicsLib),然后提供绘制各种元素的方法?

组织此活动的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

尽可能使用面向对象的方法。当我写这样的东西时,我通常会让每个对象提供至少两种方法:

public void update(int delta);
public void render();

这样我的对象和它们的许多实例都知道如何更新自己并自我渲染。然后,您可以构建代码,以便Board类的更新和呈现方法将在其子Square上调用updaterender(请参见下面的示例)。这提供了一些好处:

  1. 对象的绘制/更新紧密贴近该对象的表示(关注点分离)。
  2. 当您的“模型”类变得复杂时,您的渲染函数就会接近该数据,因此您的API保持稳定。如果您有一个绘图类,您可以想象您必须将大量数据传递给绘图类,并且每个调用都必须在模型更改时进行自定义和更改。
  3. 你不会有一个巨大的类提供绘制所有内容的API。这会很快变得庞大而笨重。
  4. 您有Painter's Algorithm的内置结构,因为您具有基于父/子关系绘制事物的层次结构。您只需要在每个父母的render方法中正确管理您的兄弟姐妹。
  5. 以下是层次结构渲染的示例。

    public class Board {
        List<Square> squares;
    
        public render() {
            // Render your board first
            ...
    
            // Render child squares
            for (Square square : squares) {
                square.render();
            }
        }
    }
    

    你可以想象,你的主游戏循环可以简单地告诉你的棋盘对象渲染你就完成了。您无需了解董事会可能需要呈现的其他内容。