python - 将位图图像绘制到 Pygame 中

标签 python class pygame

我是 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尚未定义。 screenrun_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/

相关文章:

php - 在类中调用函数时触发事件

java - 同一类中的类似方法

c++ - 引用类型的数据成员提供 "loophole"围绕 const 正确性

python - Pygame 在事件发生后移动 Sprite 坐标

python - 展平链表中的 'next' 和 'prev' 链接

python - 列表理解中的多个打印功能

Python 2.7 SimlpeQueue 导入错误(错误?)

python - 需要帮助来理解 surfarray.array2d - 它似乎无法正确保存颜色

python - 使用 pygame.timer.set_timer() 的 Pygame 闪电动画

python - 使用多处理创建两个 pygame 屏幕