gpt4 book ai didi

java - Perlin 噪声不生成 1 到 -1 之间的数字

转载 作者:行者123 更新时间:2023-11-30 02:50:56 25 4
gpt4 key购买 nike

我正在使用 LibGDX 在 Java 中开发游戏,我想要随机地形生成。我在网上找到了一个 Perlin 类(class),并决定将其用于我的项目。

我目前有一个简单的世界类,以此作为构造函数:

public World() {
Random rand = new Random();
seed = rand.nextInt();
Perlin perlin = new Perlin(seed);

for(int x = 0; x < map.length; x++) {
for(int y = 0; y < map.length; y++) {
map[x][y] = perlin.noise2(x, y);
}
}
}

( map 当然是一个二维 float 组)

在我的游戏的 ma​​in 类中,我创建了一个世界,然后在 render() 方法中绘制它,如下所示:

batch.begin();
for (int x = 0; x < w.getMap().length; x++) {
for (int y = 0; y < w.getMap().length; y++) {
if (w.getMap()[x][y] <= 0) {
batch.draw(water, x * 32, y * 32);
}
if (w.getMap()[x][y] > 0) {
batch.draw(grass, x * 32, y * 32);
} else {
log.severe("not between -1 and 1");
}
}
}
batch.end();

执行后,它基本上会向控制台发送“不在 -1 和 1 之间”的垃圾邮件,一段时间后屏幕会充满水纹理。

是类的问题还是我搞砸了?大概是后者。我应该如何修复它?另外,有什么优化建议吗?代码现在看起来有点困惑。

This is the class I'm using. Posted it on pastebin because it's ~580 lines long.

更新:我修复了日志垃圾邮件,这是 Rogue 指出的一个愚蠢的错误。

现在我面临着一个不同的问题。它似乎只产生水。我检查了 getMap()[x][y] 返回的内容,基本上只有 0.0 秒和 -0.0 秒。

最佳答案

嗯,我认为明显的一个是你的 else-if 逻辑是关闭的,你连续使用了两个 if 语句:

    if (w.getMap()[x][y] <= 0) {
batch.draw(water, x * 32, y * 32);
}
if (w.getMap()[x][y] > 0) {
batch.draw(grass, x * 32, y * 32);
} else {
log.severe("not between -1 and 1"); }
}

括号对齐也有点不稳定,但尝试使用 if else if else:

    if (w.getMap()[x][y] <= 0) {
batch.draw(water, x * 32, y * 32);
} else if (w.getMap()[x][y] > 0) {
batch.draw(grass, x * 32, y * 32);
} else {
log.severe("not between -1 and 1");
}

以前任何低于 0 的值都会打印该错误。

关于java - Perlin 噪声不生成 1 到 -1 之间的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38676893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com