Python 我能';不要把我的柏林噪声贴图生成器变成我游戏的pygame tilemap
我首先使用以下方法生成tilemap:Python 我能';不要把我的柏林噪声贴图生成器变成我游戏的pygame tilemap,python,pygame,perlin-noise,Python,Pygame,Perlin Noise,我首先使用以下方法生成tilemap: for rw in range(tilesettings.mapheight): for cl in range(tilesettings.mapwidth): randomNumber = random.randint(0,15) if randomNumber == 0: tile = tilesettings.COAL elif randomNumber == 1 or
for rw in range(tilesettings.mapheight):
for cl in range(tilesettings.mapwidth):
randomNumber = random.randint(0,15)
if randomNumber == 0:
tile = tilesettings.COAL
elif randomNumber == 1 or randomNumber == 2:
tile = tilesettings.WATER
elif randomNumber >= 3 and randomNumber <= 14:
tile = tilesettings.GRASS
else:
tile = tilesettings.DIRT
tilesettings.tilemap[rw][cl] = tile
当我这么做的时候,我犯了一个奇怪的错误:
if color_world == blue:
ValueError:包含多个元素的数组的真值不明确。使用a.any()或a.all()
多年来我一直在乱搞我的代码,我看不出我做错了什么-请有人帮忙,我将不胜感激:)
只是一个快速的更新,结果表明它不仅仅是渲染一个蓝屏,因为我看到了一个渲染的沙瓦,所以这一定与玩家的位置有关,但它非常滞后且无法播放 回答起来很棘手,因为您的答案缺少一个可运行的示例,但有两件事:
if color_world == blue:
你在这里出错并不奇怪。错误消息会告诉您出了什么问题:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
您尝试检查color\u-world
是否等于blue
,但是color\u-world
是一个多维列表,而blue
是一个整数列表,因此基本上Python现在知道该做什么了。我想这条线应该是
if color_world[i][j] == blue
另外,拆下此零件:
for row in range (tilesettings.mapheight):
for column in range(tilesettings.mapwidth):
pygame.draw.rect(screen,
colours[tilesettings.tilemap[row][column]],(column*
tilesettings.tilesize, row* tilesettings.tilesize,
tilesettings.tilesize, tilesettings.tilesize))
离开你的主循环
在此之前运行一次,将背景绘制到新的曲面
,然后在主循环中使用该新的曲面
,如下所示:
...
background = pygame.Surface((tilesettings.mapwidth*tilesettings.tilesize, tilesettings.mapheight*tilesettings.tilesize))
for row in range (tilesettings.mapheight):
for column in range(tilesettings.mapwidth):
pygame.draw.rect(background ,
colours[tilesettings.tilemap[row][column]],(column*
tilesettings.tilesize, row* tilesettings.tilesize,
tilesettings.tilesize, tilesettings.tilesize))
...
while True:
gf.check_events(ai_settings, screen, player, cursor, axe)
player.update()
cursor.update()
gf.update_screen(ai_settings, screen, player)
screen.blit(background, (0, 0))
biome.update(screen)
player.blitme()
axe.changeimage()
axe.blitme()
pygame.display.update()
因此,您不必每秒多次循环tilesettings.tilemap
中的每一行和每一列。你会明白的
这将帮助您提高性能
if color_world[i][j] == blue
for row in range (tilesettings.mapheight):
for column in range(tilesettings.mapwidth):
pygame.draw.rect(screen,
colours[tilesettings.tilemap[row][column]],(column*
tilesettings.tilesize, row* tilesettings.tilesize,
tilesettings.tilesize, tilesettings.tilesize))
...
background = pygame.Surface((tilesettings.mapwidth*tilesettings.tilesize, tilesettings.mapheight*tilesettings.tilesize))
for row in range (tilesettings.mapheight):
for column in range(tilesettings.mapwidth):
pygame.draw.rect(background ,
colours[tilesettings.tilemap[row][column]],(column*
tilesettings.tilesize, row* tilesettings.tilesize,
tilesettings.tilesize, tilesettings.tilesize))
...
while True:
gf.check_events(ai_settings, screen, player, cursor, axe)
player.update()
cursor.update()
gf.update_screen(ai_settings, screen, player)
screen.blit(background, (0, 0))
biome.update(screen)
player.blitme()
axe.changeimage()
axe.blitme()
pygame.display.update()