я использую OpenSimplex неправильно - PullRequest
0 голосов
/ 03 октября 2018

Итак, я попытался использовать шум 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)

А вот изображение, которое было сгенерировано Шум

1 Ответ

0 голосов
/ 03 октября 2018

Вы должны получать значения между целыми числами, это «сглаживает» результат, иначе вы получите обычный шум.Поэтому вам придется изменить эту строку:

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))))
...