0

バグは一目瞭然だと思うので、コードと何が起こるかのスクリーンショットを投稿します

'''
Created on Oct 29, 2012

@author: pipsqueaker
'''
import pygame, sys, random
from pygame.locals import *

frapsClock = pygame.time.Clock()

class Alien:
    def __init__(self, arg1, arg2):
        self.x = arg1
        self.y = arg2
    def move(self, craftx, crafty):
        if self.x < craftx:
            self.x += 1
        elif self.x > craftx:
            self.x -= 1
    if self.y < crafty:
        self.y += 1
    elif self.y > crafty:
        self.y -= 1

class PlayShip():
    def __init__(self, ag1, ag2):
        self.x = ag1
        self.y = ag2

class mainLopp():
    Board = pygame.display.set_mode((650, 500))
    pygame.display.set_caption("This")
    pygame.init()

    player = PlayShip(random.randrange(1, 650), random.randrange(1, 500))
    alienList = [Alien(random.randrange(1, 650), random.randrange(1, 500))]

    while True:
        pygame.draw.rect(Board, (0, 0, 255), (player.x, player.y, 12, 12))

        for currAlien in alienList:
            currAlien.move(player.x, player.y)
            pygame.draw.rect(Board, (255, 0, 0), (currAlien.x, currAlien.y, 16, 16))

        for event in pygame.event.get():
            if event.type == QUIT:
                print(alienList)
                pygame.quit()
                sys.exit()
        pygame.display.update()  
        frapsClock.tick(100)

move() メソッドは、(時間をかけて) エイリアン (赤) をプレイヤー (青) に移動することになっています。しかし、そのコードが実行されると、これが起こりますこのように連続してはいけません

そのように連続しているはずはありません。どうすれば修正できますか?

4

1 に答える 1

3

簡単な修正:

メイン ループの前に色を事前に作成します。

black = pygame.Color('black')

そしてあなたのメインループで:

while True:
    Board.fill(black)
    pygame.draw.rect(Board, (0, 0, 255), (player.x, player.y, 12, 12))

これにより、画面全体が黒くなり、すべてが効果的に消去されます。消したらすぐに描き直すのでOKです。

より高度な描画コードでは、画面いっぱいに表示する (遅くなる可能性があります) 代わりに、次のようにします。

  • 古いスプライトの上に黒い長方形を描く
  • 次に、スプ​​ライトの位置を更新します
  • 次に、スプ​​ライトを再描画します。
于 2012-10-29T18:59:38.120 に答える