0

有没有办法将 Perlin Noise 合并到我的 Minecraft 克隆中?我尝试了许多不同的方法,但都不起作用。

这是我的代码片段:

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from ursina.shaders import camera_grayscale_shader
app = Ursina()

grass = 'textures/grass.jpg'

class Voxel(Button):
    def __init__(self, position = (0,0,0), texture = grass):
        super().__init__(
            model='cube',
            texture=texture,
            color=color.color(0,0,random.uniform(.823,.984)),
            parent=scene,
            position=position,
        )

    def input(self, key):
        if self.hovered:
            if key == 'right mouse down':
                voxel = Voxel(position = self.position + mouse.normal, texture = plank)
                

            if key == 'left mouse down':
                destroy(self)
for z in range(16):
    for x in range(16):
            voxel = Voxel(position = (x,0,z))

我正在尝试使用立方体和 Perlin 的噪声随机生成地形。没有关于如何使用它的教程。

4

2 回答 2

2

我是一名 12 岁的游戏开发人员,我想这可能再次解决您的问题 这并不完美 我使用 random 模块来随机化 x、y 和 z 值,您可以根据如果代码中有缩进错误,我很抱歉,这是代码:

from ursina import *
from ursina.prefabs.first_person_controller import FirstPersonController
from ursina.shaders import camera_grayscale_shader
import random
app = Ursina()




class Voxel(Button):
    def __init__(self, position=(0, 0, 0)):
        super().__init__(
            model='cube',
            texture=texture,
            color=color.color(0, 0, random.uniform(.823, .984)),
            parent=scene,
            position=position,
    )

    def input(self, key):
        if self.hovered:
            if key == 'right mouse down':
                voxel = Voxel(position=self.position + mouse.normal)

            if key == 'left mouse down':
                destroy(self)




for z in range(random.randint(5,10)):
    print(z)
    for x in range(random.randint(5,7)):
        print(x)
        voxel = Voxel(position=(x, random.randint(0,2), z))


player  = FirstPersonController()
app.run()

这是产品的截图:

https://i.stack.imgur.com/Ktr1Q.png

于 2021-02-07T15:33:01.050 回答
0

是的,有一种方法可以将柏林噪声合并到我的世界克隆中。

from perlin_noise import PerlinNoise
import random

noise = PerlinNoise (octaves=3,seed=random.randint(1,1000000))

for z in range(-10,10):
    for x in range(-10,10):
        y = noise([x * .02,z * .02])
        y = math.floor(y * 7.5)
        voxel = Voxel(position=(x,y,z))

这是一个简单的示例,说明如何在我的世界克隆中制作随机地形,这是最终结果:https ://imgur.com/a/VZd1Uip

请记住,您需要安装 perlin noise,为此只需在终端中写入:pip install perlin-noise

于 2021-09-28T14:23:57.057 回答