2017-07-08 3 views
1

私のキャラクターが動くときのためのプログラムを作成しようとしています。ここに私のコードはここにPythonイベントにKey属性がありません

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 

は、イベントがキー属性を持っていないので、私は問題がif (event.key == K_RIGHT) and playerPos[0] < MAPWIDTH -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 M –

+0

2つの 'if'ステートメントを' if(event.type == KEYDOWN)と(event .key == K_RIGHT): ' –

答えて

0

がforloopの外です。

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 

私はまた、あなたが、私はこれが役に立てば幸い、このような elif(event.type == KEYDOWN) and (event.key == K_RIGHT):

のようなものにライン87と88を組み合わせてお勧めします。

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ループの後のコードは、もう1つレベルをインデントする必要があります。インデントはPythonでは重要なので、正しいことを確認してください。 –

関連する問題