Pygame-分配前引用的局部变量

时间:2018-12-09 23:48:23

标签: python python-3.x pygame

我一直在努力解决以下问题: gameLoop()中的“ 分配前引用的本地变量'snake'”。 当我按下一个键移动蛇时,它会弹出...我不知道如何解决-我认为“全局蛇”就足够了。如果您有任何解决方案,请告诉我-非常感谢! :)

import pygame
import sys
black = (0, 0, 0)
white = (255, 255, 255)

def displayElements():
    global snake
    snake = pygame.Rect(360, 200, 30, 10) 
    pygame.draw.rect(screen, white, snake)

def gameSetup():
    global screen, window, fps, step
    pygame.init()
    screen = pygame.display.set_mode((720, 400))
    window = screen.get_rect()
    pygame.key.set_repeat(15, 15)
    fps = pygame.time.Clock()
    step = 5
    displayElements()

def gameLoop():
    while True:

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    snake = snake.move(0,-step)
                if event.key == pygame.K_DOWN:
                    snake = snake.move(0,step)

        fps.tick(120)
        pygame.display.flip()

def main():
    gameSetup()
    gameLoop()

main()

1 个答案:

答案 0 :(得分:1)

global snake只是告诉displayElements()在全局名称空间中使用snake

但是,什么都没有告诉gameLoop()在全局名称空间中查找蛇。

通常,您不应使用global。该规则很少有例外,而且绝对不是这些例外之一-您应该重写此规则以将引用传入和传出函数。例如,这样的东西。

def displayElements():
    snake = pygame.Rect(360, 200, 30, 10) 
    pygame.draw.rect(screen, white, snake)
    return snake

def gameSetup():
    ...
    return displayElements()

def gameLoop(snake):
    ...

def main():
    snake = gameSetup()
    gameLoop(snake)