-1

我正在寻找它,所以我有一个单独的窗口可以显示任何内容,但出于我的目的,我希望它显示对象的位置,它们的状态(它们是否与某些东西等)等,等等,问题是,我不知道该怎么做。

我会使用System.out.println("Stuff: " + thing);,但信息会移动得太快。

我制作了一张很棒的图片来说明我所追求的。

在此处输入图像描述

(编辑)所以我正在寻找的是如何制作两个独立的窗口,如图所示。它们是分开的,但仍然是一个程序。它后面的空白是桌面(我应该更清楚一点)第二个调试窗口可以做任何主窗口可以做的事情(我的意思是它可以渲染形状、图像等)。我要问的是,我该如何实现这一目标?

我将在此添加/更改什么以及在哪里使其工作?

public class Game extends JFrame implements Runnable, KeyListener
{
    JFrame frame;
    Graphics2D g2d;

    public static void main(String[] args)
    {
        new Game();
    }

    public Game()
    {       
        frame = new JFrame();

        setTitle("Battle for the Roids");
        setSize(SCREENWIDTH, SCREENHEIGHT);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);

        // Set up assets and initialize loop
    }

    // Lots of lines later

    public void paint(Graphics g)
    {
        // Set up double/triple buffering
        BufferStrategy bs = getBufferStrategy();
        if(bs == null)
        {
            createBufferStrategy(3);
            return;
        }

        g2d = (Graphics2D) g;

        g2d = (Graphics2D) bs.getDrawGraphics();

        // Add things to be rendered

        g2d.dispose();
        bs.show();
    }
}

我在那里有很多额外的代码,但不需要任何东西。主要是移动、旋转、按键处理等代码。

4

2 回答 2

2

我想知道这是否对您有帮助,但您可能做的是创建一个新的 JFrame 并让它使用另一个类出现。创建一个 JLabel 对象,并让它设置您需要使用多少个对象的所有信息。

例如,如果您想让它显示您可能想尝试的用户数据:

 public class WindowSample extends JFrame {
    JLabel userData = new JLabel();
    add(userData);
    userData.setText(//information for user data);
 }

希望这可以帮助!

于 2013-08-04T23:12:01.493 回答
1

您可以使用 Log4J 并编写自己的附加程序,其唯一职责是输出到类似JTextAreaorJList的内容,这将解耦应用程序的两半。然后,您需要做的就是使用Logger来编写有关应用程序状态的信息。

如果这不能满足您的需求,您可以编写某种与您的游戏模型相关联的侦听器/观察者/回调 API。

然后,您将能够直接响应对模型的更改。这可能会降低游戏引擎的速度,因为它需要在应用程序的任何部分发生更改时触发更新。

您可以通过使用单独的线程来调度这些事件来解决这个问题,但这仍然会增加开销。

就个人而言,我喜欢第二种选择,但第一种更容易实现;)

于 2013-08-05T00:21:43.023 回答