在制作一个名为 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()
2、解决方案
为了解决该问题,您需要进行以下步骤:
- 在每次图像刷新完成后,执行一次
pygame.display.flip
。 - 在
gameLoop
函数开头使用screen = pygame.display.get_surface()
将屏幕指定给变量screen
。
以下是经过修改后的代码示例:
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():
screen = pygame.display.get_surface() # Specify the screen variable
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])
pygame.display.flip() # Flip the display
for event in pygame.event.get():
#print (event)
if event.type == QUIT:
pygame.quit()
sys.exit()
这样,图像便可以成功显示在屏幕上了。