我正在学习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";然后将其转换为一个二维数组,并根据字符串'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.Pointx=0,y=0
我想知道如何获得每个墙壁标签的位置,以便我可以检查它与我的球员移动。
这是一个有效的方式来做这样的事情吗?有人能教我一种更有效的方法吗?
为我粗糙的片断和/或糟糕的编程道歉
谢谢你,尼尔。
发布于 2013-07-16 21:02:23
public Point getLocation()由于本机事件处理的异步性质,此方法可能会返回过时的值(例如,在快速连续调用setLocation()之后)。因此,推荐的获取组件位置的方法是在java.awt.event.ComponentListener.componentMoved()内,该方法在操作系统完成移动组件后调用。
布局可能没有在内部使用setLocation()。这样getLocation()就不会按预期返回值。
https://stackoverflow.com/questions/16528295
复制相似问题