如何检测 3d 数组中最高 z 级别的对象?

问题描述 投票:0回答:1

我正在用Java开发一个简单的游戏(想想Rogue 1980),并且在draw()方法中有一个图块渲染系统。我正在从图块的 2d 数组过渡到 3d 数组,这样即使玩家图块走过,我也可以让图块持续存在

绘制方法如下:

`公共无效绘制(图形g){ Font font = new Font("TimesRoman", Font.BOLD,tileSize); g.setFont(字体);

    // Grid Lines
    g.setColor(Color.gray);
    for (int i = 0; i < boardWidth / tileSize; i++) {
        g.drawLine(i * tileSize, 0, i * tileSize, boardHeight);
        g.drawLine(0, i * tileSize, boardWidth, i * tileSize);
    }

    //Debug output
    //System.out.println("Player coordinates: X=" + player.getX() + ", Y=" + player.getY());

    // Draw Entities Tiles
    g.setColor(Color.white);
    for (int i = 0; i < boardWidth / tileSize; i++) {
        for (int j = 0; j < boardHeight / tileSize; j++) {
            for (int k = 0; k < 1; k++) {
                Tile t = tiles[i][j][k];
                if (t != null) {  //No null exception errors
                    switch (t.getType()) {
                        case NULL:
                            break;
                        case DECO:
                            g.setColor(Color.CYAN);
                            break;
                        case ENTITY:
                            g.setColor(Color.blue);
                            break;
                        case PLAYER:
                            g.setColor(Color.green);
                            break;
                        case WALL:
                            g.setColor(Color.lightGray);
                            break;
                        case ENEMY:
                            g.setColor(Color.red);
                            break;
                        case LOOTABLE:
                            g.setColor(Color.yellow);
                            break;
                        default:
                            g.setColor(Color.white);
                            break;
                    }
                    g.drawString(String.valueOf(t.getChar()), t.getX() * tileSize, t.getY() * tileSize);
                }
            }
        }
    }
}`

我已将默认图块(墙壁、地板装饰、硬币)添加到 z 级别 0,并将玩家添加到 z 级别 1。目标是仅渲染网格位置中最高的 z 级别图块

java arrays loops sorting object
1个回答
0
投票

问题中的代码有这一行:

Tile t = tiles[i][j][k];
。我假设
k
是对应于 z 级别的变量。

我还假设 “最高 z 级别” 表示最高 z 级别的 资格 图块。否则,渲染的所有图块都将来自相同的 z 级别。

因此,您可以创建一个方法来获取最高的非空图块。

   public Tile getTileZ (int x, int y) {
       for (int z = zMax; z >= 0; z--) {
          if ( tiles [x][y][z].qualifies() ) { return tiles [x][y][z]; }
       }
       return tiles [x][y][0];
   }

在此版本中,

getTileZ
是实例方法,
tiles
是实例变量。您可以创建方法
static
并传递
tiles
作为参数。

我不知道如何判定一块瓷砖是否合格。所以,我想象

Tile
类有一个实例方法
public boolean qualifies ()

因此,

Tile t = tiles[i][j][k];
行被替换为如下行:
Tile t = getTileZ (i, j);

© www.soinside.com 2019 - 2024. All rights reserved.