如何多次绘制图像

时间:2013-08-18 19:21:09

标签: java image

所以这就是我的问题我正在做一个基本的平台游戏,其中瓷砖被绘制为地面。图块基本上是一个纹理,在网格中绘制了一个命中框。但我不能多次绘制相同的图像。所以,我只是制作图像变量,还是有更好的方法?

我试过

public void paint(Grapihcs g){
    ground.draw(mapX * tilesize, mapY * tilesize);
    ground.draw(mapX * tilesize, mapY * tilesize);
}

我尝试过for循环......

public void paint(Grapihcs g){
    for(int i = 0; i < 10; i++){
        ground.draw(mapX * tilesize, mapY * tilesize);
    }
}

似乎没有什么工作......就像它最后一次画画一样。

1 个答案:

答案 0 :(得分:0)

您可以根据网格中的值多次绘制同一图像。您可以使用存储在2D阵列中的值来引用另一个1D图像阵列。

说你有一个像:

这样的数组
[1, 1, 0, 1, 1]
[1, 1, 0, 1, 1]

包含索引0中的棕色图块和索引1中的绿色图块的一维图像数组。

您将迭代2D数组,并使用存储在每个索引中的值来引用您的一维图像数组,如下所示:

for(int x=0;x<array2D.length;x++){
    for(int y=0;y<array2D[0].length;y++){
        int pixelX = //calculate x position of this tile image;
        int pixelY = //calculate y position of this tile image.
        g.drawImage(images[array2D[x][y]],pixelX,pixelY,null);
    }
}

编辑:

根据您更新的问题,您不会修改传递给ground.draw的X和Y坐标。这意味着图像将自我渲染10次。您需要更改渲染图块的X位置。

尝试这样的事情:

int mapYPos = mapY*tileSize;
for(int i=0;i<10;i++){
    ground.draw(i*tileSize, mapYPos);
}

在这里,我为X传递[0-10] * tilesize,并为Y传递相同的值mapYPos。这将为您提供一个水平条带,从左到右呈现