Pygame - локальная переменная, на которую ссылаются перед присваиванием - PullRequest
0 голосов
/ 10 декабря 2018

Я боролся с проблемой, которая гласит: " Локальная переменная 'snake', на которую ссылаются перед присваиванием " в gameLoop () .Он появляется, когда я нажимаю клавишу, чтобы переместить змею ... Я понятия не имею, как ее решить - я думал, что "глобальной змеи" будет достаточно.Пожалуйста, дайте мне знать, если у вас есть какое-либо решение - большое спасибо заранее!:)

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 голосов
/ 10 декабря 2018

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...