2

我想更改 GridWorld GUI 的类,DefaultDisplay以便可以在运行期间更改演员的图像,并且由于我使用的是代码的 jar 文件,因此我正在创建.CustomDisplayDefaultDisplay

但是,由于创建子类会更改名称,因此我必须创建使用的类的子类,DefaultDisplay以便将它们更新为使用CustomDisplay而不是DefaultDisplay. 例如,我必须创建一个DisplayMap名为CustomMapthat 的子类,而不是这个:

private Display defaultDisplay = new DefaultDisplay();

说:

private Display customDisplay = new CustomDisplay();

然后DisplayMap必须将使用的任何其他类更改为使用CustomMap. 仅仅因为它们使用我更改的类而创建所有这些类的子类似乎非常低效。

是否有可能让它CustomDisplay自动使用而不是DefaultDisplay让我只需要更改一个类?

笔记

  1. 我所说的类不在普通的javadoc上,但可以在这里找到。
  2. 我检查了Extending GridWorld并发现了很多信息,但没有任何帮助。
4

1 回答 1

1

这个问题似乎过时了,但我认为一个通用的答案可以帮助任何找到它的人。

问题是关于 GridWorld,一个用于教学的简单框架。

OP 想要进行特定的更改,通过引入新的显示类来解决未说明的问题,但不能更改现有的类。因此问题就变成了如何引入新的显示类?

应用面向对象的思维。框架是否支持引入新的显示类?我们应该检查文档,如果失败,请检查框架的公共类接口:是否有任何方法可以设置显示?我们可以检查网格、演员,也许还有其他人使用或使用这些。

尽管 OP 说了什么,但有一个明确的声明(@Andrew Thompson 所说的)解决了这个要求:

“渲染算法如下:

  1. 检查是否有一个类,其名称是添加后缀Display的类名,并且实现了info.gridworld.gui。显示界面。如果是,则调用它的 draw 方法。这与 MBS 案例研究中使用的机制相同。(如果你决定提供这样一个类,你应该扩展自动处理缩放和旋转的便利类 info.gridworld.gui.AbstractDisplay。)"

这是这个问题所需要的。

有几个“学习”。

  1. 如果您正在阅读看起来相关的文档(在这种情况下,它提到了显示界面),并且您不理解它,那么请调查它直到您理解为止。

  2. 如果您对问题解决方案的想法遇到了障碍,请在投入过多精力之前返回重新评估引导您到达那里的路径中的分支。

  3. 你的老师(在如此低水平的科目中)不会设置不可能的任务(除非他们做了一个巨大的填充物)。所以 2. 适用。

  4. 这与调试有关:我们最难的错误来自我们不知道自己做出的假设。我们可能是出于懒惰的想法或无知。因此,重新思考并了解所涉及的技术和技术。在尝试更改之前了解正在发生的事情。

于 2013-07-11T01:59:36.500 回答