OOP设计:如何决定程序流程和类负责方法(JSFML库)

时间:2013-12-19 16:55:39

标签: java oop drawable sfml program-flow

我正在设计一个2D游戏来练习Java和面向对象编程(我正在使用JSFML库,如果有帮助的话),我对如何最好地设计以下内容表示怀疑:

我正在使用的库提供了由可见游戏元素(玩家,敌人,背景等)实现的Drawable界面。我还有RenderWindow,我将在其上绘制Drawable个对象。

就是这样,RenderWindowdraw(Drawable d)方法在当前窗口上绘制Drawable对象,Drawable个对象有draw(RenderWindow r)个对象通过Drawable绘制当前RenderWindow对象的方法。

如果他们做的基本相同,我应该使用哪一个?为什么?我应该考虑什么来决定?我使用HashMap存储Drawable个对象。我应该将RenderWindow传递给HashMap中的Drawables,还是将HashMap中的Drawables传递给RenderWindow?任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:1)

您问题的一行答案是 Java语言不支持双重调度机制。

该怎么做:库希望您覆盖这些方法,但绝不会调用它们。我没有使用过这个库,但是从游戏引擎的一些经验来看,我猜应用程序会调用RenderWindow的绘图,它最终会调用所有Drawable的绘制方法。 (Drawables的收集将由RenderWindow维护。

为什么: Java通过检查调用方法的对象类(而不是通过检查引用)来动态调用该方法。这被称为(你可能知道)动态调度。
但是方法的参数只能通过检查引用来选择(不是通过作为参数传递的实际对象的类。)
这里,通过强制动态调度两次(通过使两个方法用于相同目的),库开发人员间接实现了双重调度。

将来,您可能希望扩展Drawable和RenderWindow。如果只有Drawable中的draw方法,则不能为RenderWindow的每个子项单独绘制。双重调度解决了这个问题。

希望这会有所帮助。