我已经编写了这段代码来根据角色位置绘制地图:
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)。谁能在我的方法中看到明显的错误?如果对某些人来说不明显,我可以尝试提供一个可运行的例子。
由于
答案 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);
}
}
如果您有任何其他问题,请随时提出,否则请将问题标记为已解决。希望这有帮助!