2016-07-16 12 views
0

このコードは、K_LEFTまたはK_RIGHTが押されている間、黒い矩形が連続的に移動するようにする必要がありますが、押された後に移動するだけですマウスがウィンドウ上を動き回っている間に、マウスが動いている(マウスが押されているときだけ動くはずがないとき)。 は、だからここにうまくいけば、あなたは助けることができる、コードです:あなたはイベントループ内のすべてのコードをインデントしているので、PYGAME:連続K_DOWNは実際には機能しません

import pygame 

pygame.init() 

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

gameDisplay = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('Slither') 

gameExit = False 

lead_x = 300 
lead_y = 300 
lead_x_change = 0 

clock = pygame.time.Clock() 

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
       gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -10 
      if event.key == pygame.K_RIGHT: 
       lead_x_change = 10 

     lead_x += lead_x_change 

     gameDisplay.fill(white) 
     pygame.draw.rect(gameDisplay, black, [lead_x, lead_y,10,10]) 
     pygame.display.update() 

     clock.tick(30) 


pygame.quit() 
quit() 

答えて

0

理由は、あなただけがあるRECTの画面や位置を更新していることを意味しますイベントループ内のイベント(マウスの移動、ボタンの押下など)。

は、あなたがこのように、あなたのインデントが正しいれていることを確認します:

while not gameExit: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
       gameExit = True 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       lead_x_change = -10 
      if event.key == pygame.K_RIGHT: 
       lead_x_change = 10 

    # All code below was indented to much. 
    lead_x += lead_x_change 

    gameDisplay.fill(white) 
    pygame.draw.rect(gameDisplay, black, [lead_x, lead_y, 10, 10]) 
    pygame.display.update() 

    clock.tick(30) 

また、通常、あなたの変数の命名しているときに一貫性があることをお勧めします。好ましくは、gameDisplayおよびgameExitは、より多くの連続性のためにgame_displayおよびgame_exitと命名され得る。

関連する問題