我正试图用pygame制作一个2人赛车游戏,event.key不起作用

时间:2016-09-26 15:00:43

标签: python pygame

我正在尝试制作一款2人游戏,当我尝试添加event.key == pygame.K_LEFT时,它会说AttributeError: 'Event' object has no attribute 'key'

我尝试过添加()的许多内容,但没有修复它,我也不知道它。

代码:

import pygame

pygame.init()

display_width = 1280
display_height = 720

black = (0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = (0, 255, 0)
blue = (0, 0, 255)

gameDisplay = pygame.display.set_mode((display_width, display_height))
pygame.display.set_caption('U-race multiplayer')
clock = pygame.time.Clock()

car1 = pygame.image.load('car1.png')

def carone(xone, yone):
    gameDisplay.blit(car1,(xone, yone))

xone = (display_width * 0.48)
yone = (display_height * 0.8)

xone_change = 0


crashed = False

while not crashed:

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            crashed = True

        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
               xone_change = -5
        elif event.key == pygame.K_RIGHT:
            xone_change = 5

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                xone_change = 0

错误消息:

 RESTART: C:\Users\Osamas\Desktop\U-racing multiplayer\U-racing multiplayer.py 
Traceback (most recent call last):
  File "C:\Users\Osamas\Desktop\U-racing multiplayer\U-racing multiplayer.py", line 44, in <module>
    elif event.key == pygame.K_RIGHT:
AttributeError: 'Event' object has no attribute 'key'

2 个答案:

答案 0 :(得分:1)

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_LEFT:
        xone_change = -5
    elif event.key == pygame.K_RIGHT: #indented to be part of the keydown events
        xone_change = 5

你想要这个。你的缩进是错的。

你有elif event.key == pygame.K_RIGHT:检查你的event.type,如果你考虑一下就没有意义。

答案 1 :(得分:1)

您收到错误的原因是因为不同的事件具有不同的属性。您可以在官方pygame docs上查看哪个事件具有哪些属性。

让我们举两个类型的事件:

  1. QUIT事件类型没有属性。
  2. KEYDOWN事件类型具有属性 unicode key mod
  3. 这意味着我们无法检查事件中的属性,直到我们确保事件的类型为app.directive('cloneClick', function() { return { restrict: 'A', scope: { selector: '@cloneClick' }, link: function(scope, element) { element.click(function() { element.find(scope.selector).not(':disabled').first().click(); }) } }; }) (或KEYDOWN)。< / p>

    在您的代码中,您有:

    KEYUP

    如果事件类型不是for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: xone_change = -5 elif event.key == pygame.K_RIGHT: xone_change = 5 ,那么您正在检查事件的属性,如果事件的类型为KEYDOWN,则会引发属性错误,QUIT或任何其他非MOUSEBUTTONDOWNKEYDOWN的事件。

    为了纠正这个问题,你将按照MooingRawr的要求进行修正,并确保你在第一个if语句中缩进了最后两行。我以为我会回答为什么这是错误的。