映射数组函数/语法问题

时间:2015-02-18 10:12:32

标签: python arrays pygame

我正在为学校做一个小蟒蛇游戏,我在理解使用哪种语法方面遇到了问题。

def draw_detail_from_array():
    for y in new_map_array:
        for x, _ in enumerate(y):
            if y[x] == "v":
                mapx = y[x].index
                mapy=new_map_array[y].index
                DISPLAYSURF.blit(pygame.image.load("grass1.png"), (32,  32))
                DISPLAYSURF.blit(pygame.image.load("grass1.png"), (mapx + 1) * 32, (mapy + 1) * 32)

所以我有一个2d阵列,而我循环通过它,如果有" v"我希望它在与数组中的位置对应的位置放置一个精灵。

我遇到的问题是我无法弄清楚如何从当前的x和y获取索引并将其用于" blit"精灵到屏幕位置(该数组对应一个20 x 15的正方形网格,大小为32 x 32像素。) 该数组已随机填充" v"替换" _"这代表一个空白区域。

我已经尝试了一些不同的方法,我感到卡住了。我从记忆中尝试的一切都给了我错误,如:

unsupported operand type(s) for +: 'builtin_function_or_method' and 'int'

所以我知道我没有使用正确的函数或语法,或者我的函数结构存在更大的首要问题。我对python还是比较新的,这让我筋疲力尽。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

mapx = y[x].index
mapy=new_map_array[y].index

因为index这里是一个函数,你必须像这样调用它

mapx = y[x].index()
mapy=new_map_array[y].index()

如果省略括号,而不是函数的结果,则会将函数本身分配给mapxmapy,从而导致unsupported operand type(s) for +: 'builtin_function_or_method' and 'int' < / p>

答案 1 :(得分:0)

这样的事情怎么样:

def draw_detail_from_array():
    x, y = 0, 0
    for row in new_map_array:
        for col in row:
            if col == "v":
                DISPLAYSURF.blit(pygame.image.load("grass1.png"), (x, y))
            x += 32
        y += 32
        x = 0

请注意,您不应反复加载图像;这是一个主要的性能问题。只需加载一次并重复使用即可。