python - 游戏代码中存在缩进问题

标签 python animation pygame

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/

相关文章:

Python/PonyORM/MySQL - 使用多个 URL 参数进行查询

javascript - 运行完后重新启动动画

css - 用 less 链接关键帧属性

python - 即使在 pygame 中释放 key 后,我的 Sprite 仍然继续移动

python - 如何在千位分隔符上强制使用点?

python - 如何用树木的森林来标记特征的重要性?

animation - OpenGL 中骨骼动画背后的逻辑

python - 我如何在 python 3 中播放声音?

python - 如何实时更新图像文件 Pygame?

python - 在 models.py : Django rest framwork 中导入序列化器