我想更改 GridWorld GUI 的 DefaultDisplay
类,以便我可以在运行期间更改 Actor 的图像,并且由于我使用的是代码的 jar 文件,所以我正在创建一个子类DefaultDisplay
的 CustomDisplay
。
但是,由于创建子类会更改名称,因此我必须创建使用 DefaultDisplay
的类的子类,以便将它们更新为使用 CustomDisplay
而不是 DefaultDisplay
。例如,我必须创建一个名为 CustomMap
的 DisplayMap
子类,而不是这样:
private Display defaultDisplay = new DefaultDisplay();
是这样说的:
private Display customDisplay = new CustomDisplay();
然后任何其他使用 DisplayMap
的类都必须更改为使用 CustomMap
。仅仅因为它们使用我更改的类就创建所有这些类的子类似乎非常低效。
是否有可能使 CustomDisplay
自动被使用而不是 DefaultDisplay
所以我只需要改变一个类?
注意事项
- 我说的类不在正常javadoc , 但可以找到 here .
- 我检查了 Extending GridWorld & 找到了很多信息,但没有任何帮助。
最佳答案
这个问题似乎很陈旧,但我认为一个通用的答案可以帮助任何找到它的人。
题目是关于GridWorld,一个用于教学的简单框架。
OP 想要进行特定更改,通过引入新的显示类来解决未说明的问题,但不能更改现有类。因此问题变成了如何引入新的显示类?
应用 OO 思想。框架是否支持引入新的显示类? 我们应该检查文档,如果失败,请检查框架的公共(public)类接口(interface):是否有任何地方可以设置显示的方法?我们可以检查网格、actor 以及可能由它们使用或使用它们的其他人。
尽管 OP 说了什么,但有一个明确的声明(@Andrew Thompson 说的)满足了这个要求:
"渲染算法如下:
- 查看是否有类名后缀为Display的类,实现了info.gridworld.gui。 显示界面。如果是,则调用其绘制方法。这与 MBS 案例研究中使用的机制相同。 (如果你决定提供这样一个类,你应该扩展自动处理缩放和旋转的便利类 info.gridworld.gui.AbstractDisplay。)”
这就是这个问题所需要的。
有一些“学习”。
如果您正在阅读看似相关的文档(在本例中它提到了 Display 接口(interface)),但您不理解它,那么请研究它直到您理解为止。
如果您的问题解决方案碰壁了,请在投入过多精力之前回过头来重新评估引导您到达那里的路径中的分支。
你的老师(在如此低水平的科目中)不会设置不可能完成的任务(除非他们做了一个巨大的错误)。所以 2. 适用。
这与调试有关:我们最难解决的错误来 self 们不知道自己所做的假设。我们可能是出于懒惰的想法或无知而制作它们的。因此,重新审视并了解所涉及的技术和技术。在尝试更改之前了解正在发生的事情。
关于java - 在 GridWorld 的 GUI 中扩展一个类而不更改使用它的其他类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14596971/