全局变量未定义-Python和PyGame



我试图创建一个Flappy Bird克隆。当我试图定义一些全局变量时,visualstudio告诉我,这些变量不是在全局范围内定义的。

有人能帮我吗??

我试图在全局范围内移动变量,这是有效的,但我不明白为什么这个解决方案不起作用。

这是我的代码提前感谢

import pygame
import random
pygame.init()
background = pygame.image.load('img/background.png')
base = pygame.image.load('img/base.png')
bird = pygame.image.load('img/bird.png')
gameover = pygame.image.load('img/gameover.png')
pipe_down = pygame.image.load('img/pipe.png')
pipe_up = pygame.transform.flip(pipe_down, False, True)
windowX = 288
winwowY = 512
frame_rate = 50
display_surface = pygame.display.set_mode((windowX, winwowY))
FPS = frame_rate
pygame.display.set_caption('Flappy Bird')
def drawObject():
display_surface.blit(background, (0, 0))
display_surface.blit(bird, (birdX, birdY))
def update():
pygame.display.update()
pygame.time.Clock().tick(FPS)
# Here is where define my global vars
def initializes():
global birdX, birdY, birdSpeedY
birdX = 60
birdY = 150
birdSpeedY = 0
initializes()
while True:
birdSpeedY += 1
birdY += birdSpeedY
drawObject()
update()

消息会告诉您问题的确切原因。全局变量没有在全局范围内定义。

这意味着,对于您告诉它要从全局命名空间global birdX, birdY, birdSpeedY使用的这些变量,它希望在最上面的命名空间中找到这些变量的定义。global关键字不会因为你使用它就在全局命名空间中创建它们。它们必须独立于全局命名空间而存在。

要在全局范围中定义它们,需要在全局命名空间中对其进行赋值,而不是在函数或类中。这也不可能是+=,因为这是一个引用和赋值,因此它假设定义必须在其他地方(或者它将在赋值之前被引用(。

因此,在全局命名空间的某个位置,您需要一个赋值。如果您想处理函数中的初始化(正如您正在做的那样(,它仍然必须在该函数之外定义/分配,但它可以是任何值,如None。所以你可以在你的程序顶部附近添加这个:

birdX = None
birdY = None
birdSpeedY = None

然后仍然按原样使用initializes()

或者在你的情况下,你可能只需要把initializes()中的东西放在顶级/全球级别。

最新更新