这是我正在使用的代码
import pygame
global lead_x
global lead_y
global lead_x_change
global lead_y_change
lead_x = 300
lead_y = 300
lead_x_change = 0
lead_y_change = 0
def playerUpdateMovement():
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
lead_x_change = -1
elif keys[pygame.K_RIGHT]:
lead_x_change = 1
else:
lead_x_change = 0
if keys[pygame.K_UP]:
lead_y_change = -1
elif keys[pygame.K_DOWN]:
lead_y_change = 1
else:
lead_y_change = 0
lead_x += lead_x_change
lead_y += lead_y_change
当我因任何原因运行此脚本时,我收到错误...
“第30行......赋值前引用的局部变量lead_x”
不能在函数中调用全局变量吗?这很奇怪,我是python的新手,谢谢。
答案 0 :(得分:1)
Python对" global"的处理变量确实有点奇怪,特别是如果你不习惯它。
针对您的问题的简单修复是将global
声明移到每个使用这些变量的函数中。所以:
def playerUpdateMovement():
global lead_x
global lead_y
global lead_x_change
global lead_y_change
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
lead_x_change = -1
这告诉Python你在lead_x_change
函数中使用playerUpdateMovement
实际上是对全局变量的引用,而不是使用局部变量(同名),这是默认治疗。
答案 1 :(得分:1)
如果您需要在函数内部修改全局变量,则需要在任何赋值之前使用全局关键字: global lead_x
答案 2 :(得分:0)
Python不需要以任何特殊方式声明的全局变量。只需像在第二块代码中那样在顶部声明和初始化变量。然后将global
声明移到每个更改全局的方法中。所以你可以剪掉你的第一块并粘贴到你的方法中。
请注意,要阅读全局,您不需要使用global关键字。这可以帮助保持常量不变,因为Python不会特别处理常量。