首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(GridWorld)世界的setGrid()没有正确重绘?

(GridWorld)世界的setGrid()没有正确重绘?
EN

Stack Overflow用户
提问于 2011-11-12 23:18:35
回答 1查看 525关注 0票数 2

我正在尝试使用GridWorld (来自AP计算机科学课程)来制作游戏,但我在使用多个网格时遇到了问题。世界上的setGrid方法似乎不起作用。我的印象是,您可以有多个网格对象共存,并且World指向的当前对象是在GUI中绘制的对象。但事实并非如此...当我调用世界的setGrid并传递给它一个网格时,网格似乎只在逻辑上设置,System.out.printing它给出了参与者的正确结果和他们的当前位置,但是图形用户界面不会更新,你也看不到网格。

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

代码语言:javascript
复制
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();
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-13 08:36:26

好吧,我找到问题了。在给gridworld的创建者发邮件时,他透露这是一个bug。

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

代码语言:javascript
复制
display.setGrid(world.getGrid());

添加到WorldFrame的repaint()方法的开头。问题是WorldFrame本身更新了它当前的网格,所以逻辑上它是正确的,但是WorldFrame的GridPanel对象display,实际上是网格绘制的JPanel,在重绘之前没有被告知更新它的网格。在这里,完整的方法是

代码语言:javascript
复制
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();
}

一切都很好。:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8105338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档