猿问

我使用 OpenSimplex 错了吗

所以我尝试使用 OpenSimplex 噪声来生成 2D 地形,但似乎我错过了一些东西,因为地形看起来大多是随机的。我究竟做错了什么?这是代码:


import pygame

from opensimplex import OpenSimplex

tmp = OpenSimplex()


pygame.init()

display_width = 800

display_height = 600

black = (40,40,40)

gameDisplay = pygame.display.set_mode((display_width,display_height))

gameDisplay.fill(black)

gameDisplay.convert()

clock = pygame.time.Clock()


dimensions = [100,100]

size = 40


def mapping(x):

    y = (x + 1) * 10 + 40

    return y


class GroundCell:

    def __init__(self,x,y,dim):

        self.x = x

        self.y = y

        self.dim = dim


tempcells = []

allCells = []


for a in range(0,dimensions[0]):

    tempcells = []

    for b in range(0,dimensions[1]):

        tempcells.append(GroundCell(a*size,b*size,mapping(tmp.noise2d(a,b))))

    allCells.append(tempcells)


while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            pygame.quit()

            quit()

        if event.type == pygame.KEYDOWN:

            if event.key == pygame.K_ESCAPE:

                pygame.quit()

                quit()



    for a in allCells:

        for b in a:

            pygame.draw.rect(gameDisplay,(b.dim,b.dim,b.dim),(b.x,b.y,size,size))


    pygame.display.update()

    clock.tick(120)

    gameDisplay.fill(black)

这是产生噪声的图像

米脂
浏览 205回答 1
1回答

德玛西亚99

你必须得到整数之间的值,这会“平滑”结果,否则你会得到普通的噪音。所以你必须改变这一行:tempcells.append(GroundCell(a*size,b*size,mapping(tmp.noise2d(a,b))))像这样:tempcells.append(GroundCell(a*size,b*size,mapping(tmp.noise2d(a*0.1,b*0.1))))
随时随地看视频慕课网APP

相关分类

Python
我要回答