我是 Python 初学者,正在学习 Eric Matthes 的 Python 速成类(class)。我在练习 12-2 中遇到了困难,其中您必须使用一个类将角色 Sprite 添加到 pygame 窗口中。终端告诉我“init 缺少位置参数 'screen'”,但是当我输入 skel = Skel(screen)
时,它在第 23 行显示“名称 'screen' 未定义”。这是所有代码
import sys
import pygame
class Skel():
def __init__(self, screen):
#Initialize skeleteon and set screen
self.screen = screen
#Get rectangle of skeleton and screen
self.image = pygame.image.load("EM17_skeleton.bmp")
self.rect = self.image.get_rect()
self.screen_rect = screen.get_rect()
#Place skeleton at center
self.rect.centerx = self.screen_rect.centerx
self.rect.centery = self.screen_rect.centery
def draw(self,screen):
"""Draw skeleton at location"""
screen.blit(self.image, self.rect)
skel = Skel(screen)
def run_game(self):
pygame.init()
screen = pygame.display.set_mode((400,400))
#Set background color
bg_color = (0,0,160)
#Set loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(bg_color)
skel.draw(screen)
pygame.display.flip()
run_game()
感谢您的帮助。
最佳答案
问题是当代码创建Skel
实例时,参数screen
尚未定义。 screen
在 run_game()
函数的下方定义。
skel = Skel(screen) # <-- HERE
def run_game(self):
pygame.init()
screen = pygame.display.set_mode((400,400)) # <-- AND HERE
#Set background color
bg_color = (0,0,160)
#Set loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(bg_color)
skel.draw(screen)
pygame.display.flip()
将 skel
的初始化移至该函数中即可修复该问题。
def run_game(self):
pygame.init()
screen = pygame.display.set_mode((400,400))
skel = Skel(screen) # <-- HERE
#Set background color
bg_color = (0,0,160)
#Set loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
screen.fill(bg_color)
skel.draw(screen)
pygame.display.flip()
关于python - 将位图图像绘制到 Pygame 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59148872/