2016-08-29 19 views
0

左/右矢印キーを押したときに、Image/Spriteを左右に回転させるにはどうすればよいですか? ...車のように。Pygame - キーダウン時の画像回転

は、だからここにゲームループを実行するコードは次のとおりです。

def gameplay_loop(): 
    exitgame = False 
    cellpos_x = 0 
    cellpos_y = cancer_cell.get_rect().height*2 
    while not exitgame: 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): 
       exitgame = True 
       quitgame() 
     key_pressed = pygame.key.get_pressed() 
     if key_pressed[pygame.K_LEFT]: 
      cellpos_x -= 10 
     if key_pressed[pygame.K_RIGHT]: 
      cellpos_x += 10 

     gameplay_bg = pygame.image.load("/Users/nedimkanat/Desktop/python/img/gameplay_bg.png").convert() 
     main_screen.fill(white) 
     main_screen.blit(gameplay_bg, [0,0]) 
     main_screen.blit(cancer_cell, [cellpos_x, cellpos_y]) 
     pygame.display.flip() 
     clock.tick(20) 

は私がKEY_PRESSED条件の下でそれを追加しようとしましたが、この男が言うように何も起こらなかったし、私がやった:https://stackoverflow.com/a/19316827/6256879

スプライトがあります上記のように、左/右キーを押しながら左/右に回転したいと思っています。

+0

あなたはすでに何がありますか?このサイトの目的は、プログラム全体をあなたのために書くことではありません。 pygameので – jsbueno

+0

あなたはpygameの面としてそれをあなたのイメージを渡す 'pygame.transform.rotozoom'機能を使用する必要がありますが、それが機能するために、あなたはその呼び出しの周り全体のプログラムが必要になります。 – jsbueno

+0

** 1。** [キー押下]などのイベントの処理方法を学びます(http://stackoverflow.com/documentation/pygame/5110/event-handling#t=201608291705566686826)。 ** 2。**(http://www.pygame.org/docs/ref/transform.html#pygame.transform.rotate)表面を回転]機能について学びます。 ** 3。**経験を積む、もう一度試して、ミスをし、試してみてください、そしてそれを把握したり、あなたが試したものを私たちに示してスタックオーバーフロー、上ここでは理解していないものについて、より具体的な質問を何期待したことと何が間違っていたか –

答えて

0

左矢印または右矢印をクリックするたびに1度ずつ回転させたい場合は、このようなことがうまくいく可能性があります。あなたは、画像を連続的に回転したい場合には、角度はすべてのフレームに適用されるように、関心のキーのget_pressed()を使用する必要があります。あなたが行うことができます連続回転のため

def gameplay_loop(): 
    exitgame = False 
    cellpos_x = 0 
    cellpos_y = cancer_cell.get_rect().height*2 
    while not exitgame: 
     angle = 0 #reset the angle at each iteration 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): 
       exitgame = True 
       quitgame() 
     key_pressed = pygame.key.get_pressed() 
     if key_pressed[pygame.K_LEFT]: 
      cellpos_x -= 10 
      angle += 1.0 
     if key_pressed[pygame.K_RIGHT]: 
      cellpos_x += 10 
      angle -= 1.0 

     gameplay_bg = pygame.image.load("/Users/nedimkanat/Desktop/python/img/gameplay_bg.png").convert() 
     main_screen.fill(white) 
     main_screen.blit(gameplay_bg, [0,0]) 
     cancer_cell = pygame.transform.rotate(cancer_cell,angle) 
     main_screen.blit(cancer_cell, [cellpos_x, cellpos_y]) 
     pygame.display.flip() 
     clock.tick(20) 

def gameplay_loop(): 
    exitgame = False 
    cellpos_x = 0 
    cellpos_y = cancer_cell.get_rect().height*2 
    while not exitgame: 
     angle = 0 #reset the angle at each iteration 
     for event in pygame.event.get(): 
      if event.type == pygame.QUIT or (event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE): 
       exitgame = True 
       quitgame() 
     key_pressed = pygame.key.get_pressed() 
     if key_pressed[pygame.K_LEFT]: 
      cellpos_x -= 10 

     if key_pressed[pygame.K_RIGHT]: 
      cellpos_x += 10 


     gameplay_bg = pygame.image.load("/Users/nedimkanat/Desktop/python/img/gameplay_bg.png").convert() 
     main_screen.fill(white) 
     main_screen.blit(gameplay_bg, [0,0]) 
     key_pressed = pygame.key.get_pressed() 
     if key_pressed[pygame.K_LEFT]: #do the same for the other key 
       angle += 1    #and put -= instead of += 

     cancer_cell = pygame.transform.rotate(cancer_cell,angle) 
     main_screen.blit(cancer_cell, [cellpos_x, cellpos_y]) 
     pygame.display.flip() 
     clock.tick(20) 
+0

'UnboundLocalError:代入前に参照されるローカル変数 'c​​ancer_cell' –

+0

行81:' cellpos_y = cancer_cell.get_rect()。height * 2' 行99: 'cancer_cell = pygame.transform.rotate(cancer_cell、angle)' –

+0

あなたが指定した質問のコードを見てください。あなたがそれを割り当てる前に 'cancer_cell'も使用されています。あなたのコードのどこかにあなたの 'cancer_cell'サーフェスを定義したと仮定しました。このコードを動作させるには、 'cancer_cell'変数をPygameサーフェイスにする必要があります。 – Sorade