2017-07-08 78 views
1

我想为我的角色移动时创建一个程序。这里是我的代码Python事件没有关键属性

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == KEYDOWN: 
      if(event.key == K_RIGHT): 
      playerPos[0] +=1 
    if (event.key == K_RIGHT) and playerPos[0] < MAPWIDTH -1: 
     playerPos[0] =+ 1 

这里是错误

Traceback (most recent call last): 
    File "H:\python things\firstgame.py", line 90, in <module> 
if (event.key == K_RIGHT) and playerPos[0] < MAPWIDTH -1: 
AttributeError: 'Event' object has no attribute 'key' 
+0

您预期会发生什么?更多地解释你的代码应该做什么,这样答案给出的建议将有助于你的最终目标。 –

+0

非常抱歉,这是我的移动代码,所以在游戏中,我按下键盘上的右箭头,角色向右移动。如果他是在地图的边缘,它不会让人物向右移动了@Davy中号 –

+0

你也可以或许结合你两个'if'语句组合在一起,比如'如果(event.type == KEYDOWN)和(事件.key == K_RIGHT):' –

回答

0

我认为这个问题是if (event.key == K_RIGHT) and playerPos[0] < MAPWIDTH -1: 是for循环之外因此事件没有一个关键属性。

forloop中的事件有一个关键属性,因为pygame.event.get():在forloop内部移动该行并且应该解决您的问题。

while True: 
    for event in pygame.event.get(): 
     if event.type == QUIT: 
      pygame.quit() 
      sys.exit() 
     elif event.type == KEYDOWN: 
      if(event.key == K_RIGHT): 
      playerPos[0] +=1 
     elif (event.key == K_RIGHT) and playerPos[0] < MAPWIDTH -1: 
      playerPos[0] =+ 1 

我也建议你把线87和88成一个像这样的 elif(event.type == KEYDOWN) and (event.key == K_RIGHT):

我希望这有助于。

1

如果有人遇到这个帖子,并有同样的问题,我修复了我的错误,并以此结束。添加评论以帮助他人了解

while True: 
    #get all the user events 
    for event in pygame.event.get(): 

     #if user wants to quit 
     if event.type == pygame.locals.QUIT: 
      #and the game close the window 
      pygame.quit() 
      sys.exit() 

     #if a key is pressed 
     elif event.type == pygame.locals.KEYDOWN: 
      #if right arrow is pressed 
      if event.key == K_RIGHT and playerPos[0] < MAPWIDTH - 1: 
       #change player's x postion 
       playerPos[0] +=1 
      if event.key == K_LEFT and playerPos[0] > 0: 
       #change player x position 
       playerPos[0] -=1 
      if event.key == K_UP and playerPos[0] > 0: 
       #change players x position 
       playerPos[1] -=1 
      if event.key == K_DOWN and playerPos[1] < MAPHEIGHT -1: 
       #change player x position 
       playerPos[1] += 1 
+1

for循环之后的代码应该缩进一级。缩进在Python中很重要,所以确保它是正确的。 –