import pygame, sys
from pygame.locals import *
CHARSPEED = 3
pygame.mixer.init()
pygame.mixer.music.load("nq-rotmg.mp3")
pygame.mixer.music.play(-1)
FPS = 30
fpsClock = pygame.time.Clock()
pywindow = pygame.display.set_mode((500, 500), 0, 32)
pygame.display.set_caption('God of the Mad Realm')
background = pygame.image.load("Background.jpg")
background = background.convert()
pywindow.blit(background, (0, 0))
pygame.display.flip()
Assassin = pygame.image.load("Assassin_L.png")
Assassin_R.set_colorkey((255, 255, 255))
Assassin_L.set_colorkey((255, 255, 255))
assassinx = 10
assassiny = 10
pygame.key.set_repeat(10, 10)
while True:
pywindow.blit(background, (0, 0))
pywindow.blit(Assassin, (assassinx, assassiny))
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if (event.key == K_LEFT):
Assassin=pygame.image.load('Assassin_L.png')
elif (event.key == K_RIGHT): <<<-------------------------------------
Assassin=pygame.image.load('Assassin_R.png')
elif (event.key == K_UP):
Assassin=pygame.image.load('Assassin_L.png')
elif (event.key == K_DOWN):
Assassin=pygame.image.load('Assassin_L.png')
keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_LEFT]:
assassinx -= CHARSPEED
elif keys_pressed[K_RIGHT]:
assassinx += CHARSPEED
elif keys_pressed[K_UP]:
assassiny -= CHARSPEED
elif keys_pressed[K_DOWN]:
assassiny += CHARSPEED
pygame.display.update()
fpsClock.tick(FPS)
就在我放置箭头的地方,我不断收到一条错误消息:
Traceback (most recent call last):
File "Character.py", line 42, in <module>
elif (event.key == K_RIGHT):
AttributeError: event member not defined
我确信这是一个愚蠢的错误,但它确实开始给我带来麻烦。
最佳答案
您的缩进还不正确。 AttributeError
的出现是由于 event
变量没有在正确的范围内定义。你的代码...
for event in pygame.event.get():# <<<--------
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN: # <<<--------
if (event.key == K_LEFT):
if event.type == KEYDOWN
应嵌套在 for
循环下,以便 event
成为正确定义。因此,正确的代码应该是,
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN: # one more indented
if (event.key == K_LEFT): # corresponding appropriate indent
Assassin=pygame.image.load('Assassin_L.png')
elif (event.key == K_RIGHT):
Assassin=pygame.image.load('Assassin_R.png')
elif ...
此外,所有游戏执行代码都应位于 while True
block 下。
while True:
pywindow.blit(background, (0, 0))
pywindow.blit(Assassin, (assassinx, assassiny))
for event in pygame.event.get():
if event.type==QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if (event.key == K_LEFT):
Assassin=pygame.image.load('Assassin_L.png')
elif (event.key == K_RIGHT):
Assassin=pygame.image.load('Assassin_R.png')
elif (event.key == K_UP):
Assassin=pygame.image.load('Assassin_L.png')
elif (event.key == K_DOWN):
Assassin=pygame.image.load('Assassin_L.png')
keys_pressed = pygame.key.get_pressed()
if keys_pressed[K_LEFT]:
assassinx -= CHARSPEED
elif keys_pressed[K_RIGHT]:
assassinx += CHARSPEED
elif keys_pressed[K_UP]:
assassiny -= CHARSPEED
elif keys_pressed[K_DOWN]:
assassiny += CHARSPEED
pygame.display.update()
fpsClock.tick(FPS)
关于python - 游戏代码中存在缩进问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188448/