【问题标题】:List being empty when it shouldn't be列表不应该是空的
【发布时间】:2020-04-02 19:08:40
【问题描述】:

这是我的相关代码...

def start_room(): 
    global r_x 
    global r_y
    tile_rects = []
    screen.blit(floor1_floor, (0, 0))
    r_y = 0
    for layer in startroom:
        r_x = 0
        for tile in layer:  
            if tile == '2':
                bat_create()    
            if tile == '1':
                screen.blit(grass, (r_x*40, r_y*40))       
                tile_rects.append(pygame.Rect(r_x*40, r_y*40, 40, 40))
            r_x += 1
        r_y += 1 

函数start_room() 只被调用一次。应该发生的事情是tile_rects 被清空,然后在if tile == '1': 中,正方形被blitted 到屏幕上,然后为这些正方形制作矩形。出于某种原因,当我调用没有tile_rects = [] 的函数并打印tile_rects 时,矩形的所有值都存在。当我用tile_rects = [] 调用函数时,没有任何值存在。这很好,但我需要在使用之前清除数组。有谁知道如何解决这个问题?谢谢!

【问题讨论】:

  • global tile_rects?
  • 注意,这是一个列表,不是一个数组
  • 您从哪里打印 tile_rects?
  • 您提供的这个函数对 tile_rects 没有任何作用。您应该打印它或从函数中返回它,否则 tile_rects 值将丢失
  • 感谢所有帮助。 Global-ing tile_rects 运行良好。感谢您更正我的呼叫列表数组:)

标签: python list pygame append rect


【解决方案1】:

在函数体或局部范围内声明的变量被解释为局部变量。如果要在函数作用域的全局命名空间中设置变量,必须使用global statement

def start_room(): 
    
    global tile_rects 

    tile_rects = []

    # [...]

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 2022-07-12
    • 2018-01-17
    • 2014-04-17
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多