0

戻ってきました... ゲームに多くの時間を費やした後、2 つの質問に出くわしました。どちらもスプライトとテキストの表示に関するものです。1 つ目は、テキストの点滅です。これは多くの人に起こったことだと思いますが、グーグルで調べても、何が原因なのかについての直接的な答えを見つけることができませんでした. 画面にブリットしたときにテキストが点滅する理由を誰かが説明してくれたら、大歓迎です。

次の質問は、スプライトに関することを除いて、最初の質問とほぼ同じです。スペースバーが押されたときにプレーヤースプライトから弾丸を発射するように Python に指示するコードをゲームに追加しました。実行するとエラーは発生せず、弾丸が画面に表示されてすぐに消えます。これら 2 つのバグは相互に直接関連していると推測していますが、何が原因なのかはわかりません。

私よりも pygame について詳しい方がいらっしゃいましたら、問題を解決する方法を判断できるように、何が原因なのか説明していただけないでしょうか。

これが私のバンカー(プレーヤー)と弾丸クラスです:

class Bunker(pygame.sprite.Sprite):
def __init__(self):
     pygame.sprite.Sprite.__init__(self)
     bunker = pygame.image.load(bunk).convert_alpha()
     self.image = bunker
     self.rect = self.image.get_rect()
     bunker_x = 160
     bunker_y = 0
     self.firecountdown = 0
def update(self, milli):
     self.pos = self.rect
     if (self.firecountdown > 0):
          self.firecountdown -= milli      
def collide(self, EnemyTank):
     return pygame.sprite.collide_rect(self.rect, EnemyTank.rect)
def fire(self, bullet):
     if (self.firecountdown <=0):
          bullet.x = 165
          bullet.y = 0
          bullet.fired = True
          bullet.speed = 100
          self.firecountdown = 500

class Bullet(pygame.sprite.Sprite):
     def __init__(self):
          pygame.sprite.Sprite.__init__(self)
          bullet = pygame.image.load(bull).convert_alpha()
          self.image = bullet
          self.rect = self.image.get_rect()
          self.x = 0
          self.y = 0
          self.speed = 0
          self.forwardx = 1
          self.forwardy = 0
          self.fired = False
     def update(self):
          self.pos = self.rect
          self.x += self.forwardx * self.speed
          self.y += self.forwardy * self.speed
          if self.x > 640:
               self.fired = False

そして私のメインループのセクション:

font = pygame.font.SysFont('Courier', 76)
     text = font.render('Game Over', True, (0,0,0))

     if e_tank_x>640:
         screen.blit(text, (100,100))

     if bullet.fired == True:
          screen.blit(bullet.image, (bullet.x, bullet.y))
4

2 に答える 2

3

まばたきを避けるには、フレームごとに pygame.display.update または pygram.display.flip への呼び出しが 1 回だけであることを確認してください。この呼び出しは通常、メイン ループの最後で clock.tick(fps) 呼び出しの直前に行われます。

例:

# main loop
while true:
    for event in pygame.event.get():
        # process events and update game state

    # Draw current game state

    # Update display
    pygame.display.flip()

    # Keep running at FPS frames/second
    clock.tick(FPS)
于 2012-11-26T13:20:50.957 に答える