我正在尝试用Java制作一个简单的游戏。我用这种方式设置了框架的大小:
getContentPane().setPreferredSize(new Dimension(1280, 720));
然后我添加了一个JComponent对象,它在我的游戏中绘制了整个图形:
getContentPane().add(gameGraphics);
这一切似乎都正常,直到我试图防止游戏对象超出地图。 &#34;游戏引擎&#34;传送每个低于0或高于720或宽度为1280的物体。我确信算法工作得很完美(我非常精确地检查了),看看当我尝试到达窗口的右下角时会发生什么(左上角正常工作!):</ p>
(玩家是角落里的蓝色矩形)
窗口的右侧和下方有一个10像素的可用空间线。因此窗口的内容必须大于1280x720像素。 你有什么想法吗?感谢。
有一整个JFrame代码:
MainFrame() {
super("GameOne");
setLayout(new BorderLayout());
getContentPane().setPreferredSize(new Dimension(RES_WIDTH, RES_HEIGHT));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gameGraphics = new GameGraphics();
getContentPane().add(gameGraphics);
new Player();
new TestShip(10, 10);
pack();
setLocationRelativeTo(null);
setResizable(false);
setVisible(true);
}
我说的GameGraphics是一个扩展JComponent的类,游戏中可以看到的所有东西都是在这个类的paintComponent方法中生成的。
RES_WIDTH和RES_HEIGHT分别是等于1280和720的常量。
问题已解决:
解决方案是覆盖JComponent类的getPreferredSize()方法(在我的应用程序中它将在GameGraphics类中)(许多布局管理器会询问每个组件,而pack()方法也会这样做)。你只需要让它返回你想要它的大小(在&#39; Dimension&#39;中)。 另外,制作JFrame&#39; setResizable(false)&#39;在你打电话给pack()之前。
答案 0 :(得分:0)
问题已解决:
解决方案是覆盖JComponent类的getPreferredSize()方法(在我的应用程序中它将在GameGraphics类中)(许多布局管理器会询问每个组件,而pack()方法也会这样做)。你只需要让它返回你想要的大小(在'Dimension'中)。在调用pack()之前,最好还是制作一个JFrame'setResizable(false)'。