如何在java中的窗口上显示12X12网格的48X48像素图像

时间:2014-07-01 20:39:22

标签: java 2d game-engine

我想制作自己的引擎,但为了做到这一点,我想完全理解如何做到这一点。我需要的是知道如何使用nil布局管理器显示网格。 nil管理器的原因是因为为了移动地图,我需要将一个图像放在屏幕上,然后将所有内容滚动到视图中。

如果有更简单的方法可以使用预制引擎,请告知我们。

感谢。

2 个答案:

答案 0 :(得分:1)

看,我已经在AWT / Swing的absolute positioning路上了。它可以工作,你可以做任何你想要的东西,但是...... a)你需要学习一点(从上面的链接开始);并且b)准备好拔出一些头发 - 你不会意识到布局经理会做多少才会没有它们。

听起来你有一个GridLayout的教科书用例,除了你需要在屏幕上设置该布局的动画。如果是这样的话,那就更容易了。"绝对是绝对定位。使用GridLayout在一个容器中布置GUI,然后将该容器放入一个绝对定位的容器中,并使用SwingTimer 动画到屏幕上,而不是比完全定位整个东西。更好的是,使用Timing Framework或为此目的而构建的另一个库。

答案 1 :(得分:0)

这就是我如何处理这个问题。我不会为你写出所有详细的代码,但这是基本的想法。

  1. 将图像加载到名为的BufferedImage中。请参阅:http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html
  2. 创建名为JPanel
  3. MapPanel的子类
  4. 覆盖 这个MapPanel的{​​{3}}方法就像这样:

    protected void paintComponent(Graphics g) { Graphics2D graphics = (Graphics2D) g.create(); graphics.drawImage(img /*This is what you loaded in Step 1*/, null, 0, 0); }

    这只是将图像绘制到面板上。

  5. 现在回到您的GUI代码并使用null布局管理器创建一个主JPanel,就像您说的那样。
  6. 制作一个普通的12x12二维数组MapPanels
  7. 使用以下内容循环遍历此数组:

    for (int i = 0; i < 12; i++) { for (int j = 0; j < 12; j++) { array[i][j] = new MapPanel(); array[i][j].setBounds(12 * i, 12 * j, 48, 48); } }

  8. 现在将所有这些MapPanel添加到主null布局JPanel。制作JFrame并将主JPanel设置为内容窗格。

  9. 你已经完成了!

  10. 希望这有帮助! :)如果您对此不了解,请在此之前询问Google。

    编辑:

    正如@drewmoore所说,绝对定位是乏味的。如果您想使用GridLayout和时间框架,只需将您的主JPanel布局设置为GridLayout,然后从步骤6中移除array[i][j].setBounds(12 * i, 12 * j, 48, 48);部分。之后,您就可以了。很高兴去。