java - 根据人物位置绘制二维 map

标签 java swing awt

我编写了这段代码来根据字符位置绘制 map :

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 是我的图 block 数组,其中包含有关图 block 的信息。当给定tile变量时,imageManager可以返回要绘制的图像。由于某种原因,这根本无法正确绘制,图像没有按照正确的顺序绘制,并且没有根据用户位置绘制(如果我更改用户 x 和 y, map 不会相应移动) 。谁能看出我的方法中有明显的错误吗?如果对某人来说不明显,我可以尝试提供一个可运行的示例。

谢谢

最佳答案

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

g.drawImage();

调用正在转移到屏幕外的地方。例如,可以说:

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

你的 for 循环将根据你的 Tile[][] map 获得正确的图像,但它们会绘制在错误的位置。例如,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);
    }
}

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

关于java - 根据人物位置绘制二维 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27532162/

相关文章:

java - 中心裁剪图像 JavaFX

java - 更新 JOptionPane 以反射(reflect)组件状态更改

java - 将 path2d 添加到 jpanel

java - 一个简单的小程序中的错误

java在圆形图像内添加文本

java - IndexOutOfBoundsException : Index: 0, 大小:0

java - Jackson 序列化后功能

java - 在运行 gradle eclipse 任务之前是否需要关闭 Eclipse?

java - 我应该如何安装 JDateChooser?

java - java中使用BufferStrategy时如何避免出现黑线