Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我能';不要把我的柏林噪声贴图生成器变成我游戏的pygame tilemap_Python_Pygame_Perlin Noise - Fatal编程技术网

Python 我能';不要把我的柏林噪声贴图生成器变成我游戏的pygame 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

我首先使用以下方法生成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 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()