我正在学习Java,所以我很新。 我正在使用GUI布局,图像,标签等创建一个简单的“迷宫”类型游戏。
要创建我的迷宫布局,我使用了一个字符串数组;
mazeLayout[0] = "WWWWWWWWWW";
mazeLayout[1] = "WSSSWWSWWW";
mazeLayout[2] = "WSWSWWSSSW";
mazeLayout[3] = "WSWSWWWWSW";
mazeLayout[4] = "WSWSWWWWSW";
mazeLayout[5] = "WSWSWSSSSW";
mazeLayout[6] = "WSWSWSWWWW";
mazeLayout[7] = "WSWSWSWWWW";
mazeLayout[8] = "WSWSSSWWWW";
mazeLayout[9] = "WWWWWWWWWW";
然后将其转换为2d数组并在其中放置带有图像图标的标签,具体取决于字符串为“W”表示墙,“S”表示空格。标签也是一个阵列,我在这背后的想法是限制玩家的移动,使他们不能穿过墙壁。
int mw = 0;
int mf = 0;
for(int y = 0; y < 10; y++){
for(int x = 0; x < 10; x++){
mazeLayout2d[y][x] = mazeLayout[y].substring(x, x+1);
if (mazeLayout2d[y][x].equals("W")){
lblmazewall[mw] = new JLabel();
mazewall = new ImageIcon("mazewall.png");
lblmazewall[mw].setIcon(mazewall);
pCenter.add(lblmazewall[mw]);
mw++;
pCenter.revalidate();
}
if (mazeLayout2d[y][x].equals("S")){
lblmazefloor[mf] = new JLabel();
mazefloor = new ImageIcon("mazefloor.png");
lblmazefloor[mf].setIcon(mazefloor);
pCenter.add(lblmazefloor[mf]);
mf++;
pCenter.revalidate();
}
}
}
我的问题是当我运行此行
System.out.println(lblmazewall[x].getLocation()); //x being any number
我总是得到java.awt.Point [x = 0,y = 0]
我想知道如何获取每个墙贴标签的位置,以便我可以根据我的播放器动作进行检查。
这甚至是做这样事情的有效方法吗? 有人可以教我一种更有效的方法吗?
抱歉我的原始片段或编程错误
谢谢你Niall。
答案 0 :(得分:0)
public Point getLocation()
由于本机事件处理的异步性质,此方法可以返回过时的值(例如,在快速连续几次调用setLocation()
之后)。因此,建议的获取组件位置的方法在java.awt.event.ComponentListener.componentMoved()
之内,在操作系统完成组件移动后调用该方法。
布局可能未在内部使用setLocation()
。因此getLocation()不会按预期返回值。