在可能的情况下,尽可能使用面向对象的方法。当我写这样的东西时,我通常会让我的每个对象至少提供两种方法:
public void update(int delta);
public void render();
这样我的对象和它们的许多实例都知道如何更新自己和渲染自己。update
然后,您可以构建您的代码,以便您的 Board 类的更新和渲染方法将render
在其子 Squares 上调用(参见下面的示例)。这提供了一些好处:
- 对象的绘制/更新与该对象的表示紧密相关(关注点分离)。
- 随着您的“模型”类变得复杂,您的渲染函数与该数据接近,因此您的 API 保持稳定。如果您有一个绘图类,您可以想象您必须将大量数据传递给绘图类,并且每个调用都必须随着模型的变化而定制和更改。
- 你不会有一个巨大的类来提供一个用于绘制所有东西的 API。这将很快变得庞大而笨拙。
- 您具有画家算法的内置结构,因为您具有基于父/子关系绘制事物的层次结构。您只需要按照每个父母的
render
方法正确管理您的兄弟姐妹。
这是层次结构渲染的示例。
public class Board {
List<Square> squares;
public render() {
// Render your board first
...
// Render child squares
for (Square square : squares) {
square.render();
}
}
}
所以你可以想象,你的主游戏循环可以简单地告诉你的棋盘对象进行渲染,你就完成了。您不需要对董事会可能需要呈现的其他内容有任何深入的了解。