我想制作自己的引擎,但为了做到这一点,我想完全理解如何做到这一点。我需要的是知道如何使用nil布局管理器显示网格。 nil管理器的原因是因为为了移动地图,我需要将一个图像放在屏幕上,然后将所有内容滚动到视图中。
如果有更简单的方法可以使用预制引擎,请告知我们。
感谢。
答案 0 :(得分:1)
看,我已经在AWT / Swing的absolute positioning路上了。它可以工作,你可以做任何你想要的东西,但是...... a)你需要学习一点(从上面的链接开始);并且b)准备好拔出一些头发 - 你不会意识到布局经理会做多少才会没有它们。
听起来你有一个GridLayout
的教科书用例,除了你需要在屏幕上设置该布局的动画。如果是这样的话,那就更容易了。"绝对是不绝对定位。使用GridLayout
在一个容器中布置GUI,然后将该容器放入一个绝对定位的容器中,并使用SwingTimer
将 动画到屏幕上,而不是比完全定位整个东西。更好的是,使用Timing Framework或为此目的而构建的另一个库。
答案 1 :(得分:0)
这就是我如何处理这个问题。我不会为你写出所有详细的代码,但这是基本的想法。
JPanel
MapPanel
的子类
覆盖
这个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);
}
这只是将图像绘制到面板上。
JPanel
,就像您说的那样。MapPanels
使用以下内容循环遍历此数组:
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);
}
}
现在将所有这些MapPanel添加到主null布局JPanel
。制作JFrame
并将主JPanel
设置为内容窗格。
你已经完成了!
希望这有帮助! :)如果您对此不了解,请在此之前询问Google。
正如@drewmoore所说,绝对定位是乏味的。如果您想使用GridLayout
和时间框架,只需将您的主JPanel
布局设置为GridLayout
,然后从步骤6中移除array[i][j].setBounds(12 * i, 12 * j, 48, 48);
部分。之后,您就可以了。很高兴去。