2017-08-10 1 views
1

enter image description hereComment réparer l'image dans mon jeu Python?

Je fais un jeu en utilisant le module pygame. Chaque fois que je fais bouger mon cochon, il sort comme ceci: voir photo ci-dessus. Comment puis-je réparer cela? Je pense que c'est quelque chose à voir avec la façon dont j'ai bloqué mon image ou c'est quelque chose à voir avec la façon dont j'ai codé la boucle principale. En outre, il a commencé à le faire lorsque j'ai défini l'image d'arrière-plan. J'ai donc enlevé l'image de fond pour empêcher l'image du cochon de sortir comme ça, mais ça sort toujours comme ça même quand l'image de fond a disparu. Voici mon code:

script jeu principal:

import sys 

import pygame 

from pig import Pig 

pygame.init() 

# Dimensions of screen. 
screen_width = 800 
screen_height = 600 

# Set the screen display and caption. 
screen = pygame.display.set_mode((screen_width, screen_height)) 
pygame.display.set_caption("Pig Heaven") 


# Objects 
pig = Pig(screen) 


def sky_blitme(screen): 
    """Set background sky image.""" 
    sky_img = pygame.image.load('images/sky.png') 
    sky_img = pygame.transform.scale(sky_img, (800, 600)) 
    screen.blit(sky_img, (0, 0)) 


sky_blitme(screen) 

while True: 

    # Accept events 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 

     # Keydown events 
     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_RIGHT: 
       pig.moving_right = True 
       pig.orientation = 'right' 
      elif event.key == pygame.K_LEFT: 
       pig.moving_left = True 
       pig.orientation = 'left' 
      elif event.key == pygame.K_UP: 
       pig.moving_up = True 
      elif event.key == pygame.K_DOWN: 
       pig.moving_down = True 

     # Keyup events 
     elif event.type == pygame.KEYUP: 
      if event.key == pygame.K_RIGHT: 
       pig.moving_right = False 
      elif event.key == pygame.K_LEFT: 
       pig.moving_left = False 
      elif event.key == pygame.K_UP: 
       pig.moving_up = False 
      elif event.key == pygame.K_DOWN: 
       pig.moving_down = False 

    pig.blitme() 
    pig.update() 

    pygame.display.flip() 

est ici le module de porc:

import pygame 


class Pig(): 

    def __init__(self, screen): 
     """Initialize the pig and set its starting position.""" 
     self.screen = screen 

     # Load the pig image and set pig and screen to rect. 
     self.image = pygame.image.load('images/pig.png') 
     self.image2 = pygame.transform.flip(self.image, True, False) 
     self.rect = self.image.get_rect() 
     self.screen_rect = screen.get_rect() 

     # Start the pig at the bottom center of the screen. 
     self.rect.centerx = self.screen_rect.centerx 
     self.rect.bottom = self.screen_rect.bottom 

     # Pig direction 
     self.orientation = 'down' 

     # Speed of the pig 
     self.pig_speed = 1.5 
     self.center = float(self.pig_speed) 

     # Set a variable for each movement. 
     self.moving_right = False 
     self.moving_left = False 
     self.moving_up = False 
     self.moving_down = False 

    def update(self): 
     """Update the position of the pig. 
     Set boundaries on the edges of the screen.""" 

     if self.rect.right <= self.screen_rect.right: 
      if self.moving_right: 
       self.rect.centerx += self.pig_speed 

     if self.rect.left > 0: 
      if self.moving_left: 
       self.rect.centerx -= self.pig_speed 

     if self.rect.top > 0: 
      if self.moving_up: 
       self.rect.bottom -= self.pig_speed 

     if self.rect.bottom <= self.screen_rect.bottom: 
      if self.moving_down: 
       self.rect.bottom += self.pig_speed 

    def blitme(self): 
     if self.orientation == 'right': 
      self.screen.blit(self.image, self.rect) 
     elif self.orientation == 'left': 
      self.screen.blit(self.image2, self.rect) 
     else: 
      self.screen.blit(self.image, self.rect) 

Je suis nouveau dans la programmation et c'est le premier jeu que je crée donc J'apprécierais que vous me donniez aussi des conseils et que vous critiquiez ma structure de codage.

+0

Je veux juste de se déplacer, à gauche , droite, haut et bas. – Katrina

+0

Ok, alors comment est-ce que l'image fixe d'un cochon qui s'est déplacé vers le haut illustre bien que cela ne se produit pas? Votre problème est l'effet tunnel? De l'image, tout ce à quoi je pense, c'est que "les cochons ne peuvent pas voler, alors ils s'enfuient dans le ciel" ... – roganjosh

+1

Le cochon a l'air génial. – Adam

Répondre

1

Redessinez l'arrière-plan avant de dessiner le cochon. De cette façon, il va couvrir les porcs précédents. C'est comme ça que vous êtes censé le faire. Pour ainsi vous faire ne pas charger l'image chaque image, prendre la charge d'image et transformez de la fonction en haut, et puis juste redessiner l'arrière-plan à chaque fois

#... 
screen.blit(sky_img, (0, 0)) 
pig.blitme() 
pig.update() 
#... 
+0

Cela a réglé le problème. Mais, il a fait bouger le cochon extrêmement plus lentement qu'auparavant. J'ai changé la vitesse du cochon, mais il semble agité quand il se déplace. Comment puis-je réparer ça? – Katrina

+0

@Katrina Sortez la fonction sky_blitme. Chargez l'image et effectuez la transformation au début, puis faites simplement screen.blit (sky_img, (0, 0)) au lieu de la fonction. Le chargement de l'image prend du temps, ce à quoi je n'ai pas pensé. –

+0

Le cochon se déplace un peu moins vite maintenant, mais ça va faire. – Katrina