我用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)

这是产生的图像噪声

您必须获取整数之间的值,这会"平滑"结果,否则您将获得普通噪音。 因此,您必须更改此行:

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

最新更新