我编写了这段代码来根据字符位置绘制 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/