Java 2D游戏多态性

时间:2014-02-16 17:29:19

标签: java polymorphism game-engine

我正在用Java开发一个简单的2D游戏而且我被卡住了。

我的所有游戏对象(EnemyPlayerItemWall,...)正在扩展Entity

Entity是一个抽象类,包含一些抽象方法,如update()

我创建了一个名为Drawable的接口,其中包含draw()方法。

某些游戏对象(例如Item)应为Entity,但也应为Drawable,而其他游戏对象(如Wall)应为Entity(未连接到拼贴,只是x和y坐标)

这看起来像这样:

List<Entity> entities;

在构造函数中,我这样做:

entities = tileMapReader.getEntities();

我的问题是:我应该如何绘制Drawable

我希望能够做到这样的事情:

for (Entity entity : entities) {
    entity.draw(g);
}

但由于所有实体都没有draw()方法,我无法做到这一点。我不认为if (entity instanceof Drawable)是个好主意。

3 个答案:

答案 0 :(得分:1)

您可以使用Entity运算符测试Drawable是否实施instanceof

for (Entity entity : entities) {
    if (entity instanceof Drawable) {
        ((Drawable) entity).draw(g);
    }
}

答案 1 :(得分:1)

保留额外的Drawables。这样你就可以限制绘制那些,并对所有实体做所有其他事情。

答案 2 :(得分:0)

首先,你的墙是看不见的?其次,我喜欢其他两个答案:您可以保留Drawables的集合,或检查是否实现了Drawable。

第三种选择是让所有实体都实现drawable,并将Wall的实现留空。