gpt4 book ai didi

java - (GridWorld) World 的 setGrid() 没有正确重绘?

转载 作者:行者123 更新时间:2023-12-04 06:08:08 27 4
gpt4 key购买 nike

我正在尝试使用 GridWorld(来自 AP 计算机科学类(class))来制作游戏,但在使用多个网格时遇到了问题。 World 的 setGrid 方法似乎不起作用。我的印象是,您可以有多个网格对象共存,并且 World 指向的当前对象是在 GUI 中绘制的对象。但这不是发生的事情......当我调用 World 的 setGrid 并将其传递给一个网格时,该网格似乎只在逻辑上被设置,而 System.out.printing 它给出了它的 Actor 及其当前位置的正确结果,但是GUI 不会更新,您实际上无法看到网格。

我写了一个简单的 ActorWorld 来说明这一点:

public static void main(String[] args) throws Exception
{
ActorWorld x = new ActorWorld()
{
Grid<Actor> gr1 = new BoundedGrid<Actor>(10,10);
Grid<Actor> gr2 = new BoundedGrid<Actor>(10,10);


public void step()
{
new Actor().putSelfInGrid(gr1, new Location(1,1));
new Actor().putSelfInGrid(gr2, new Location(9,9));
if (getGrid() == gr2)
setGrid(gr1);
else
setGrid(gr2);
System.out.println(getGrid());
}
};
x.show();
}

每一步都应该更改到另一个网格并显示它,所以基本上应该发生的是网格中的一个 Actor 将位置从 (1,1) 更改为 (9,9)。但实际上,它只是显示一个空网格(因为它使用的是在默认构造函数中创建的原始网格,因为我没有提供)。
这是怎么回事?如何让它绘制当前网格?

最佳答案

好的,我发现了问题。在向 gridworld 的创建者发送电子邮件时,他透露这是一个错误。

我找到了源代码并添加了这一行

display.setGrid(world.getGrid());

到 WorldFrame 的 repaint() 方法的开头。问题在于 WorldFrame 本身会更新其当前的网格,因此从逻辑上讲它位于正确的网格上,但是 WorldFrame 的 GridPanel 对象 display,实际上是绘制网格的 JPanel,并没有被告知在更新之前更新其网格重新粉刷。有了这个,完整的方法是
public void repaint()
{
display.setGrid(world.getGrid());
String message = getWorld().getMessage();
if (message == null)
message = resources.getString("message.default");
messageArea.setText(message);
messageArea.repaint();
display.repaint(); // for applet
super.repaint();
}

一切都很好。 :)

关于java - (GridWorld) World 的 setGrid() 没有正确重绘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8105338/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com