我目前正在学习使用LibGDX在Java中开发游戏,并对等距类型的瓷砖游戏中的无限 map 生成有几个问题.我当前在屏幕构造函数中的代码如下所示.

for (int col = MAP_WIDTH - 1; col >= 0; --col) {
        for (int row = MAP_HEIGHT - 1; row >= 0; --row) {
            int x = (col * TILE_WIDTH / 2) - (row * TILE_WIDTH / 2);
            int y = (col * TILE_HEIGHT / 2) + (row * TILE_HEIGHT / 2);

            float noise = OpenSimplex2.noise2_ImproveX(SEED, ((float) col) * scale, ((float) row * scale));
            mainStage.addActor(new TileActor(x, y, col, row, getNameFromNoise(noise), mainStage));
        }
    }

这会将和Actor添加到设置的MAP_WIDTH和MAP_HEIGH中,并根据单纯噪波算法更改该平铺的纹理.我怎样才能最好地把这个改变成一个无限的世界呢?是否应该事先计算所有噪声值,然后在摄像机平移演员的位置时加载演员?我如何最好地存储这个生成的 map ?谢谢.

推荐答案

我认为你不需要存储单纯形值,因为它不是一个随机函数,对于给定的输入,你总是得到相同的结果,因此为什么输入参数之一通常是时间,以获得变化.现在,我承认我没有使用OpenSimplex2,我使用了另一个实现,但关键是单纯形噪声是连贯的,所以它不能依赖于不连贯的随机性. 所以我假设你每次玩的时候都使用SEED来提供一个不同的关卡,所以假设这可以被称为Level_Seed. 无论如何,对于一个无限的世界,你可以可靠地重新访问区域而不会改变它们,那么你需要为你当前所在的区域生成程序,并且给定单工噪声是可重复的,那么你只需要改变你的函数来迭代你当前所在的区域,然后将该区域映射到屏幕上. 也就是说,您可以在

screenCenterX - (screenWidth/2) to screenCenterX+ (screenWidth/2)

使用内部迭代器

screenCenterY - (screenHeight/2) to screenCenterY+ (screenHeight/2)

我猜有很多种方法,但单纯形噪声不是一个随机函数,即每次结果都不同,这意味着它确实适合于程序生成方法. 您可能还想看看这个https://doc.mapeditor.org/en/stable/manual/using-infinite-maps/,它是一个磁贴编辑器,允许动态超大尺寸的 map ,也可以插入到libGDX中,我指的是它是libGDX框架的一部分. 你可以随时在https://libgdx.com/community/的discord聊天群上提问,因为我可以想象你会很快得到回答,因为你会问很多意见.

Java相关问答推荐

gitlab ci不会运行我的脚本,因为它需要数据库连接'

取消按钮,但没有任何操作方法引发和异常

如何打印本系列的第n项y=-(1)-(1+2)+(1+2+3)+(1+2+3+4)-(1+2+3+4+5)...Java中的(1+2+3+4...+n)

Java记录的不同序列化/反序列化

第二次按下按钮后,我需要将按钮恢复到其原始状态,以便它可以再次工作

将响应转换为带值的键

使用UTC时区将startDatetime转换为本地时间

使用Jackson库反序列化json

如何在我的世界中为互动增加冷却时间?

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

AWS Java SDK v2.x中没有setObjectAcl方法

组合连接以从两个表返回数据

在整数列表中查找和可被第三个整数整除的对时出现无法解释的RunTimeError

循环不起作用只有第一个元素重复

无法在IntStream上应用Collectors.groupingBy

Cucumber java-maven-示例表-未定义一步

UuidGenerator Bean 类型不匹配?

为什么 log4j 过滤器在appender中不起作用

将在 Docker 中运行的 Spring Boot 连接到在 Docker 中运行的 PostgreSQL,无需 compose 文件?

Keycloak + Spring Boot 角色认证不起作用