2017-01-28 3 views
0

В настоящее время я пытаюсь создать простую версию игры Breakout with Pygame. Проблема в том, что я хочу, чтобы мой bat перемещался по экрану, и для этого мне нужно иметь дело с событиями и тем фактом, что при нажатии правой/левой стрелки летучая мышь мгновенно перемещается вправо/влево. Однако мой код не работает; длина летучей мыши увеличивается, а не просто перемещается всякий раз, когда я нажимаю клавишу. Я просмотрел коды и примеры, но я все еще потерян.Breakout game with Pygame - Обработанные события

Вот мой код:

import pygame, sys 

pygame.init() 

width, height = 800, 600 
screen = pygame.display.set_mode([width, height]) 
bat_speed = 30 
bat = pygame.image.load('bat.png').convert() 
batrect = bat.get_rect() 

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT:       
       batrect = batrect.move(-bat_speed, 0)  
       if (batrect.left < 0):       
        batrect.left = 0  
      if event.key == pygame.K_RIGHT:      
       batrect = batrect.move(bat_speed, 0) 
       if (batrect.right > width):        
        batrect.right = width 

    screen.blit(bat, batrect) 
    pygame.display.flip() 

pygame.quit() 

ответ

0

Когда вы блитирования что-то на экране он будет оставаться там. Что происходит, так это то, что вы бьете летучую мышь в разных местах, заставляя ее казаться, что ширина летучей мыши увеличивается. Простое исправление будет состоять в том, чтобы очистить экран, прежде чем нарисовать биту.

while 1: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT:       
       batrect = batrect.move(-bat_speed, 0)  
       if (batrect.left < 0):       
        batrect.left = 0  
      elif event.key == pygame.K_RIGHT:      
       batrect = batrect.move(bat_speed, 0) 
       if (batrect.right > width):        
        batrect.right = width 

    screen.fill((0, 0, 0)) # This will fill the screen with a black color. 
    screen.blit(bat, batrect) 
    pygame.display.flip() 

Кроме того, использование elif вместо нескольких if, когда вы не хотите, чтобы проверить все условия, как я сделал выше.