2013-08-04 33 views
-1

我正在寻找它,所以我有一个单独的窗口,可以显示任何东西,但为了我的目的,我希望它能显示诸如对象的位置,它们的状态(它们是否与某物相冲突等)等等问题是,我不知道如何去解决这个问题。如何绘制显示我想要的单独窗口?

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

我做了和真棒图像有点说明我后。

enter image description here

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

这是什么我会添加/更改和在哪里,使其工作?

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(); 
    } 
} 

我有很多额外的代码在那里,但没有什么是必需的。大多是移动,旋转,按键处理等代码。

+0

也许你应该看看日志框架,例如,log4j的。我认为这会更容易,因为你似乎只使用它来记录调试信息。 –

+0

我想你可能需要添加一些关于你试图做什么的更多细节。考虑扩大你的问题。 – Zyerah

回答

2

Idk如果这可以帮助你,但你可能做的是创建一个新的JFrame,并使用另一个类来显示它。创建一个JLabel对象,并让它设置所有需要使用的对象的所有信息。

例如,如果你想拥有它显示的用户数据你可能会想尝试:

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

希望这有助于!

1

您可以使用Log4J并编写您自己的appender,其唯一的责任是输出到JTextAreaJList之类的东西,这样可以解耦您的应用程序的两部分。然后,您需要做的就是使用Logger来编写关于应用程序状态的信息。

如果这不符合您的需求,您可以编写一些链接到您的游戏模型的侦听器/观察者/回调API。

然后,您可以直接响应对模型的更改。这有可能拖慢你的游戏引擎的速度,因为随着应用程序的任何部分改变,它都需要触发更新。

你可以通过使用一个单独的线程来调度这些事件,但这仍然增加开销。

就个人而言,我喜欢第二个选项,但首先是更容易实现;)

+0

+1,我喜欢你提出的两种方法。虽然他们都要求认真执行:-) –

相关问题