首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2d随机生成的拼贴游戏Libgdx Java

2d随机生成的拼贴游戏Libgdx Java
EN

Stack Overflow用户
提问于 2014-07-30 00:51:24
回答 1查看 2K关注 0票数 1

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

但是里面有随机生成的不同的瓷砖。做这件事的最好方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2014-07-30 02:04:23

只需使用for循环,并在每个位置放置一个随机的瓦片

代码语言:javascript
复制
for(int i = 0; i < numTilesY; i++)
{
    for(int j = 0; j < numTilesX; j++)
    {
        placeRandomTile(i, j);
    }
}

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

如果你想让瓦片形成一个类似于“我的世界”的逼真世界,你应该使用某种像Perlin Noise这样的噪波函数。它将是随机的,因为每次你生成一个新的世界,世界都会不同。

编辑:

代码语言:javascript
复制
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数组中,您只需循环遍历数据并在适当的位置绘制每个图块。

在您的绘图方法中,您只需像这样绘制地图中的每个瓦片:

代码语言:javascript
复制
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类

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25020794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档