2d随机生成平铺游戏Libgdx Java

时间:2014-07-29 16:51:24

标签: java android libgdx

所以我正在尝试创建一个自上而下2d并使用像素平铺地图样式格式的游戏。他们想要做的就是说4种不同的瓷砖,不同的绿色和棕色的草色。 我想在1920 * 1080像素区域周围随机生成这4个图块,以产生半真实效果。 所以像这样: enter image description here

但是随机生成了不同的瓷砖。 这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

只需使用for循环并在每个位置放置一个随机磁贴

for(int i = 0; i < numTilesY; i++)
{
    for(int j = 0; j < numTilesX; j++)
    {
        placeRandomTile(i, j);
    }
}

placeRandomTile只会使用java的Random类来选择一个随机数,并根据数字放置相应的tile。例如,如果randomNumber == 2,则放置草瓦片。

如果你想让瓷砖形成一个类似于Minecraft的逼真世界,你应该使用某种类似噪音的功能,如Perlin Noise。每当你创造一个新世界时,世界就会与众不同。

编辑:

int[][] map= new int[32][32]; //create 32x32 tile map

public void placeRandomTile(int xIndex, int yIndex)
{
    Random rand = new Random();
    int value = rand.nextInt(5);//get value between 0 and 5
    int tile = 0;

    if(value == 0)
    {
        tile = 1; //1 corresponds to GRASS tile
    }

    if(value == 1)
    {
        tile = 2; //WATER tile
    }

    this.map[xIndex][yIndex] = tile;
}

现在您已将地图数据存储在2D数组中,您只需循环浏览数据并在适当的位置相应地绘制每个图块。

在绘图方法中,您只需从地图中绘制每个图块,如下所示:

public void draw(float x, float y, Graphics g)
{
    for(int i = 0; i < map.length; i++)
    {
        for(int j = 0; j < map[i].length; j++)
        {
            int tileType = map[i][j]; //get tile type
            if(tileType == Tile.grass.id)
            {
                Tile.grass.draw(x + (j * Tile.WIDTH), y + (i * Tile.HEIGHT));//draw grass
            }

        }
    }
}

由于您使用的是libgdx,因此您需要查看这些类:TiledMap,TiledMapTileLayer,Screen,Texture和OrthogonalTiledMapRenderer。您基本上创建了一个TiledMap并使用TiledMapRenderer绘制纹理。

您可以在不久前查看我在Github上的示例游戏,它可以满足您的需求。这是here。看看Dungeon类和屏幕/ GameScreen类