-2

所以这是我的问题,我正在做一个基本的平台游戏,将瓷砖绘制为地面。瓷砖基本上是一个纹理,在网格中绘制了一个碰撞箱。但我不能多次绘制相同的图像。那么我只是制作成千上万的图像变量还是有更好的方法?

我试过了

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);
    }
}

似乎没有任何效果......就像它只是最后一次绘制它一样。

4

1 回答 1

0

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

假设您有一个数组,例如:

[1, 1, 0, 1, 1]
[1, 1, 0, 1, 1]

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

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

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);
    }
}

编辑:

根据您更新的问题,您没有修改传递给的 X 和 Y 坐标ground.draw。这意味着图像在自身上被渲染了 10 次。您需要更改渲染图块的 X 位置。

尝试这样的事情:

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

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

于 2013-08-18T19:25:46.200 回答