我正在寻找它,所以我有一个单独的窗口可以显示任何东西,但为了我的目的,我希望它显示对象的位置,它们的状态(它们是否与某些东西相撞等)和等等,问题是,我不知道该怎么做。
我会使用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();
}
}
我有很多额外的代码,但没有什么是必需的。主要是移动,旋转,键处理等代码。
答案 0 :(得分:2)
如果这对你有帮助,请点击,但你可以做的是创建一个新的JFrame并让它出现在另一个类中。创建一个JLabel对象,并让它为您需要使用的对象设置所有信息。
例如,如果您想让它显示用户数据,您可能需要尝试:
public class WindowSample extends JFrame {
JLabel userData = new JLabel();
add(userData);
userData.setText(//information for user data);
}
希望这有帮助!
答案 1 :(得分:1)
您可以使用Log4J并编写自己的appender,其唯一的责任是输出JTextArea
或JList
,这会将应用程序的两半分离。然后,您需要做的就是使用Logger
来编写有关应用程序状态的信息。
如果这不符合您的需求,您可以编写一些链接到您的游戏模型的侦听器/观察者/回叫API。
然后,您就可以直接响应模型的更改。这可能会减慢你的游戏引擎速度,因为它需要在应用程序的任何部分发生变化时随时触发更新。
你可以通过使用一个单独的线程来调度这些事件,但这仍然会增加开销。
就个人而言,我喜欢第二种选择,但第一种选择更容易实现;)