2016-03-05 195 views
2

你好,我是pygame的新手。 當我試圖將我的rect向右或向左移動時。矩形不會從一個位置移動到另一個位置,而是向右或向左擴展/延伸。Pygame矩形不移動?

爲什麼?

import pygame, sys, time 

pygame.init() 
red = (255, 0, 0) 
gameDisplay = pygame.display.set_mode((800, 600)) 
pygame.display.set_caption('MyGame') 
move_x = 200 
move_y = 200 


while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       move_x -= 10 

      if event.key == pygame.K_RIGHT: 
       move_x += 10 
     # pygame.Rect.move(10, 10) 
     # gameDisplay.fill(white, rect=[move_x, move_y, 10, 100]) 
    pygame.draw.rect(gameDisplay, red, [move_x, move_y, 10, 10]) 
    pygame.display.update() 
    pygame.display.flip() 

enter image description here

請參閱上面的圖像。 按下右鍵或左鍵後的樣子。

回答

3

繪圖前使用surface.fill。

[0, 0, 0]我使用的是黑色的RGB代碼。您應該聲明如

BLACK = (0, 0, 0) 

作爲一個常數,以避免重複。所以請改變並像上面一樣使用它。

import pygame, sys, time 

pygame.init() 
red = (255, 0, 0) 
gameDisplay = pygame.display.set_mode((800, 600)) 
pygame.display.set_caption('MyGame') 
move_x = 200 
move_y = 200 


while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       move_x -= 10 

      if event.key == pygame.K_RIGHT: 
       move_x += 10 
     # pygame.Rect.move(10, 10) 
    gameDisplay.fill([0,0,0]) # The line added. 
    pygame.draw.rect(gameDisplay, red, [move_x, move_y, 10, 10]) 
    pygame.display.update() 
    pygame.display.flip() 

要小心,不要畫fill方法之前任何東西,它都將被清除,因爲你用別的東西填充的屏幕。

編輯:我剛剛意識到你已經定義了red。如果你宣佈它全部上限,可能會更好。 RED。因爲它是一個全球常數,如PEP-8所示。

1
import pygame, sys, time 

pygame.init() 
red = (255, 0, 0) 

gameDisplay = pygame.display.set_mode((800, 600)) 
background = pygame.Surface(gameDisplay.get_size()) 
background = background.convert() 
background.fill((0,0,0)) 

pygame.display.set_caption('MyGame') 

move_x = 200 
move_y = 200 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_LEFT: 
       move_x -= 10 

      if event.key == pygame.K_RIGHT: 
       move_x += 10 
     # pygame.Rect.move(10, 10) 
     # gameDisplay.fill(white, rect=[move_x, move_y, 10, 100]) 


    background.fill((0,0,0)) 
    pygame.draw.rect(background, red, [move_x, move_y, 10, 10]) 

    gameDisplay.blit(background, (0, 0)) 
    pygame.display.flip()