0

我正在学习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.Point[x=0,y=0]

我想知道如何获取每个墙标签的位置,以便根据我的玩家移动检查它。

这甚至是做这种事情的有效方法吗?有人可以教我一个更有效的方法吗?

抱歉我的粗略片段和/或糟糕的编程

谢谢尼尔。

4

1 回答 1

0
public Point getLocation()

由于本机事件处理的异步特性,此方法可能会返回过时的值(例如,在多次setLocation()快速连续调用之后)。因此,获取组件位置的推荐方法是 within java.awt.event.ComponentListener.componentMoved(),在操作系统完成移动组件后调用。

布局可能未在setLocation()内部使用。因此 getLocation() 不会按预期返回值。

于 2013-07-16T13:02:22.500 回答