因此,我正在尝试创建一个游戏,这是自上而下的2d和使用像素平铺地图样式格式。他们的方式,我想做的是有4种不同的瓷砖,不同深浅的绿色和棕色的草。我想在1920*1080像素区域周围随机生成这4个瓦片,以提供半逼真的效果。所以就像这样:

但是里面有随机生成的不同的瓷砖。做这件事的最好方法是什么?
发布于 2014-07-30 02:04:23
只需使用for循环,并在每个位置放置一个随机的瓦片
for(int i = 0; i < numTilesY; i++)
{
for(int j = 0; j < numTilesX; j++)
{
placeRandomTile(i, j);
}
}placeRandomTile只需使用java的Random类来选择一个随机数,并根据该数字放置相应的瓦片。例如,如果randomNumber == 2,则放置草瓦片。
如果你想让瓦片形成一个类似于“我的世界”的逼真世界,你应该使用某种像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类和screens/GameScreen类
https://stackoverflow.com/questions/25020794
复制相似问题