我正在用Java开发一个简单的2D游戏而且我被卡住了。
我的所有游戏对象(Enemy
,Player
,Item
,Wall
,...)正在扩展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)
是个好主意。
答案 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的实现留空。