gpt4 book ai didi

python - 赋值前引用了局部变量 'x',但 x = 0

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:47 24 4
gpt4 key购买 nike

我正在 pygame 中制作游戏,但是当我为僵尸类调用 update() 函数时它说 UnboundLocalError:赋值前引用的局部变量“x”但 x = 0,如果我从 Zombie init 函数调用 update,它会显示 NameError: name 'update' is not Define

class Zombie:
x = 0
y = 0
movX = 0

def movStop(self):
movX = 0

def update(self):
x += movX

def movX(self):
movX = -2

def __init__(self, _x, _y):
x, y = _x, _y
image = pygame.image.load('zombie.png')
win.blit(image, (x, y))

def main():
# init window
pygame.display.set_caption(title)
pygame.init()
clock = pygame.time.Clock()

# game loop and user input
isClosed = False
while not isClosed:
for event in pygame.event.get():
if event.type == pygame.QUIT: # check if exit button is pressed
isClosed = True
# user input
# render
win.fill(green)
zomb = Zombie(50,50)
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_a:
zomb.movX()
if event.type == pygame.KEYUP:
if event.key == pygame.K_a:
movStop()
zomb.update()
geWrite('health', 40, 20, 20)
# redisplay
pygame.display.update()
clock.tick(120)
pygame.quit()
quit()

最佳答案

x是局部变量。您必须使用self.x , self.y , self.movX在类方法中。

你的类可能是这样的

class Zombie:

def __init__(self, x=0, y=0):

self.mov_x = 0

self.image = pygame.image.load('zombie.png')
self.rect = self.image.get_rect()

self.rect.x = x
self.rect.y = y

# or in one line
# self.rect = self.image.get_rect(x=x, y=y)

def draw(self, surface)
surface.blit(self.image, self.rect)

def movStop(self):
self.mov_x = 0

def update(self):
self.x += self.mov_x

def movX(self):
self.mov_x = -2

我使用rect ( pygame.Rect() ) 因为它很有用 - 你可以得到 rect.center , rect.right一些 pygame 类需要它来绘制元素 - 请参阅 pygame.sprite.Group.draw .

你不能有变量movX和方法movX同时。

关于python - 赋值前引用了局部变量 'x',但 x = 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34332840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com