所以我正在尝试创建一个自上而下2d并使用像素平铺地图样式格式的游戏。他们想要做的就是说4种不同的瓷砖,不同的绿色和棕色的草色。 我想在1920 * 1080像素区域周围随机生成这4个图块,以产生半真实效果。 所以像这样:
但是随机生成了不同的瓷砖。 这样做的最佳方式是什么?
答案 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类