根据人物位置绘制2d地图

时间:2014-12-17 18:16:38

标签: java swing awt

我已经编写了这段代码来根据角色位置绘制地图:

public void drawBoard(Tile[][] map, Graphics g){
            int horizontalDifference = windowWidth / 8; //Spacing between images
            int verticalDifference = windowHeight / 8;
            for(int i = bobby.x - 4; i<=bobby.x + 4; i++){
                for(int j = bobby.y - 4; j<=bobby.y + 4; j++){
                    if(i < 0 || j < 0 || i > map.length - 1 || j > map[0].length - 1){
                        continue; //Out of bounds, don't draw this tile
                    }
                    g.drawImage(imageManager.returnImage(map[i][j]), i*horizontalDifference, j*verticalDifference, rootPane);
                }
            }
        }

map是我的图块数组,其中包含有关图块的信息。给定tile变量时,imageManager可以返回要绘制的图像。由于某些原因,这根本没有正确绘制,图像没有按照正确的顺序绘制,也没有根据用户的位置绘制(如果地图不相应,则地图不会相应移动我改变了用户x和y)。谁能在我的方法中看到明显的错误?如果对某些人来说不明显,我可以尝试提供一个可运行的例子。

由于

1 个答案:

答案 0 :(得分:1)

您的问题来自于如何使用变量i和j。你使用它们的方式使它成为你的

g.drawImage();

调用正在屏幕上绘制。例如,让我们说:

windowWidth = 800;
windowHeight = 800;
bobby.x = 20;
bobby.y = 20;

你的for循环会根据你的Tile [] []地图获得正确的图像,但是它们会在错误的位置绘制。例如,for循环的第一次迭代将在这些位置绘制图像:

(16 * 100, 16 * 100)
(16 * 100, 17 * 100)
(16 * 100, 18 * 100)
(16 * 100, 19 * 100)

这些都是屏幕外的。你能做到的就是说

for(int i = -4; i <= 4; i++){
    for(int j = -4; j <= 4; j++){
        if(bobby.x + i < 0 || bobby.x + i > map.length - 1 || bobby.y + j < 0 || bobby.y + j > map[0].length - 1) continue;
        g.drawImage(imageManager.returnImage(map[bobby.x+i][bobby.y+j],(i+4)*horizontalDifference,(j+4)*verticalDifference,rootPane);
    }
}

如果您有任何其他问题,请随时提出,否则请将问题标记为已解决。希望这有帮助!