0

我回来了……在我花了很多时间研究我的游戏之后,我遇到了 2 个问题。它们都与显示精灵和文本有关。第一个是闪烁的文本。我敢打赌,你们中的许多人都发生过这种情况,但是通过谷歌搜索,我找不到导致它的直接答案。如果有人可以向我解释为什么我的文字在我将它粘贴到屏幕上时会闪烁,我将不胜感激。

我的下一个问题与我的第一个问题几乎相同,只是它涉及一个精灵。我在游戏中添加了一些代码,告诉 python 在按下空格键时从我的玩家精灵中发射子弹。当我运行它时,我没有收到任何错误,我的项目符号显示在我的屏幕上,然后立即消失。我猜这两个错误是直接相关的,但我不确定是什么原因造成的。

任何比我更了解 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。该调用通常在主循环结束时就在 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 回答
0

我看到了 Bullet 的问题,当你发射它时,你将它设置为 true。然后,在制作子弹后将其设置为 false。问题是,看起来你只在火是真实的时候才画子弹。这意味着您将子弹绘制一帧,然后设置 fire false 并停止绘制它

于 2012-11-29T01:29:26.803 回答