2017-03-21 19 views
-1

矢印キーを使用して四角形を移動したいので、このコードを書いています。 これは動作しますが、ループサイクルは四角形を移動せず、毎回新しいサイクルを作成します。結果は浮気のようです。あなたは、PICでそれを見ることができます:the result of the code after some key pressurePygame、四角形を移動し、先の位置にある古い四角形を削除します。

をここで私が書いたコード:

import sys 
import pygame 

pygame.init() 
pygame.display.set_caption('SAGA') 
clock=pygame.time.Clock() 
FPS=30 
#the initial position 
POS_X=300 
POS_Y=300 
ship = pygame.image.load("fighter_0.png") 

while True: 
    #if cycle for detect the key pressure 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_UP: 
       POS_Y=POS_Y-10 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_DOWN: 
       POS_Y=POS_Y+10 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_RIGHT: 
       POS_X=POS_X+10 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_LEFT: 
       POS_X=POS_X-10 
    #here i draw the rectangle 
    pygame.draw.rect(screen,(255,255,255),(POS_X,POS_Y,30,30)) 
    clock.tick(FPS) 
    pygame.display.update() 
pygame.quit() 

は、私はpygameのいくつかの原理を理解していないと思うが、正直なところ、私はどちらかわかりません。

答えて

1

あなたがしたことを正確にしています:毎回新しい矩形を描画します。コンピュータはそんなにイライラしている。オブジェクトを移動する代わりに、の描画を使用しました。まず、各反復で

  1. 背景(黒)に一致するもので、以前の四角形を消し去る:

    は、2つの基本的な選択肢を持って、この問題を解決するには。 新しい矩形を描画します。
  2. スプライトなどの移動可能なオブジェクトを使用して、再描画する代わりにmoveメソッドを使用してゲームを更新します。 StackOverflowやインターネットで "pygame move object"を検索すると、この目的のために多くのコードを見つけることができます。
1

ループを実行するたびに、古い画面のイメージを描画します。したがって、あなたの場合、直前の四角形の上に長方形を描画しています。前のループの繰り返しで何があったのか画面をクリアする必要があります。これを行う最も簡単な方法は、画面に単一の色またはイメージを塗りつぶすことです:

import sys 
import pygame 

# Colours 
black = [0, 0, 0] 

pygame.init() 
screen = pygame.display.set_mode((640,480)) 
pygame.display.set_caption('SAGA') 
clock=pygame.time.Clock() 
FPS=30 
#the initial position 
POS_X=300 
POS_Y=300 
ship = pygame.image.load("fighter_0.png") 

while True: 
    #if cycle for detect the key pressure 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_UP: 
       POS_Y=POS_Y-10 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_DOWN: 
       POS_Y=POS_Y+10 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_RIGHT: 
       POS_X=POS_X+10 
     if event.type == pygame.KEYDOWN: 
      if event.key ==pygame.K_LEFT: 
       POS_X=POS_X-10 
    #here i draw the rectangle 
    screen.fill(black) # Fill the entire screen with black 
    pygame.draw.rect(screen,(255,255,255),(POS_X,POS_Y,30,30)) 
    clock.tick(FPS) 
    pygame.display.update() 
pygame.quit() 
関連する問題