2015-04-08 2 views
1

Я сделал класс под названием Player, который имеет изображение под названием player.img, которое не отображается на экране. Когда я запускаю код, он просто отображает черный экран, на котором ничего нет. Я пытаюсь научиться делать классы так жаль, если это действительно испортилось.Почему этот спрайт не отображается на экране?

import pygame 
import sys 
from pygame.locals import * 

#starts the program 
pygame.init() 

white = (255, 255, 255) 
black = (0, 0, 0) 
red = (255, 0, 0) 
blue = (0, 0, 255) 
green = (0, 255, 0) 
yellow = (255, 255, 153) 

#creates a window of 800x600 
setDisplay = pygame.display.set_mode((800, 600)) 
pygame.display.set_caption('Menu') 

img = pygame.image.load('C:\\Users\\Ben\\Documents\\sprite.png') 

class Player(pygame.sprite.Sprite): 
     def __init__(self): 
       pygame.sprite.Sprite.__init__(self) 
       self.img = pygame.image.load('C:\\Users\\Ben\\Documents\\sprite.png').convert() 
       self.imgx = 10 
       self.imgy = 10 
       self.screen = pygame.display.get_surface() 
     def draw(self): 
       self.screen.blit(self.img) 

     def load(self, filename): 
       self.img = pygame.image.load('C:\\Users\\Ben\\Documents\\sprite.png').convert_alpha() 


player = Player()    

def gameLoop(): 
    imgx = 10 
    imgy = 10 
    lead_x_change = 0 
    lead_y_change = 0 
    move_variable = 5 

    while True: 
     screen.blit(player.img, [player.imgx,player.imgy]) 

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

gameLoop() 

ответ

1

Я вижу две проблемы с вашим текущим кодом.

  1. Вы никогда не переворачиваете свой дисплей. Это обычно выполняется после того, как все блиты завершены для данного кадра. Например ваш цикл в то время как будет выглядеть следующим образом: функция

    while True: 
        screen.blit(player.img, [player.imgx,player.imgy]) 
        pygame.display.flip() 
    
        for event in pygame.event.get(): 
         #print (event) 
         if event.type == QUIT: 
          pygame.quit() 
          sys.exit() 
    
  2. Ваш gameLoop() не знает, что «экран» есть. Вам нужно будет указать его где-нибудь. Например, прямо перед запуском цикла while будет нормально.

    screen = pygame.display.get_surface() 
    while True: 
        screen.blit.... 
    

Вы наверняка хотите, чтобы перестроить некоторые вещи. Если у меня будет некоторое время спустя, я добавлю к этому ответу свои рекомендации по реструктуризации. Но на данный момент эти две настройки должны запускать вашу программу.

Смежные вопросы