2012-11-26 7 views
0

Je suis de retour ... Après avoir passé beaucoup de temps à travailler sur mon jeu, j'ai rencontré 2 questions. Les deux concernant l'affichage des sprites et du texte. Le premier est, texte clignotant. Je parie que c'est arrivé à beaucoup d'entre vous, mais en googlant, je n'ai pas trouvé de réponse directe à ce qui le cause. Si quelqu'un pouvait m'expliquer pourquoi mon texte clignote quand je le blitte à l'écran, je l'apprécierais énormément.Texte clignotant et Sprites en pygame

Ma prochaine question est presque la même que ma première, sauf qu'il s'agit d'un sprite. J'ai ajouté du code au jeu qui dit à Python de tirer une balle de mon sprite lorsque la barre d'espace est enfoncée. Quand je l'exécute, je ne reçois aucune erreur et ma balle est affichée sur mon écran puis disparaît immédiatement. Je devine que ces deux bogues sont directement liés l'un à l'autre mais je ne suis pas certain de ce qui le cause. Tout le monde qui en sait plus sur pygame que moi, pourriez-vous s'il vous plaît m'expliquer ce qui cause cela afin que je puisse trouver un moyen de résoudre le problème.

Voici mon bunker (le joueur) et la classe de balle:

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 

et une partie de ma boucle principale:

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)) 
+0

Je pense que votre balle ne disparaît pas tellement que de quitter l'écran très rapidement. Essayez de ralentir un peu. – Xymostech

+0

Comment ajoutez-vous la balle? –

Répondre

3

Pour éviter de clignoter vous assurer que vous avez seulement un appel à pygame.display.update ou pygram.display.flip par image. L'appel se passe généralement à la fin de la boucle principale juste avant un appel clock.tick (fps).

Exemple:

# 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) 
0

Je vois le problème avec Bullet, quand vous le feu, vous mis le feu à true. Ensuite, vous le définissez à false après avoir fait la balle. Le problème est, il semble que vous ne dessinez la balle que lorsque le feu est vrai. Cela signifie que vous dessinez la balle pour un cadre, puis mettez le feu false et arrêtez de le dessiner

Questions connexes