pygame:将精灵类绘制到屏幕时的错误

发布于 2025-02-06 14:13:49 字数 1518 浏览 0 评论 0原文

我正在尝试使用类player将精灵绘制到屏幕上,但是我得到了追溯。当我将对象绘制到屏幕上时,似乎在抱怨,我不确定是什么原因引起的。我是Pygame的新手,所以我认为我使用的是错误的,或者我缺少的东西我不太了解。

这是我的代码:

import pygame
from sys import exit

# initilaization
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Bullet hell')

class Player(pygame.sprite.Sprite):
    '''The Main player class'''
    def __init__(self):
        super().__init__()
        self.player_image = pygame.image.load('sprites/player/player.png').convert_alpha()
        self.player_rect = self.player_image.get_rect(topleft = (0, 0))

# Player
player = pygame.sprite.GroupSingle()
player.add(Player())

# main game loop
while True:

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

    player.draw(screen)
    pygame.display.update()

它产生此错误:

Traceback (most recent call last):
  File "/home/linkio/Projects/bullet-hell-game/main.py", line 29, in <module>
    player.draw(screen)
  File "/home/linkio/.local/lib/python3.10/site-packages/pygame/sprite.py", line 552, in draw
    zip(sprites, surface.blits((spr.image, spr.rect) for spr in sprites))
  File "/home/linkio/.local/lib/python3.10/site-packages/pygame/sprite.py", line 552, in <genexpr>
    zip(sprites, surface.blits((spr.image, spr.rect) for spr in sprites))
AttributeError: 'Player' object has no attribute 'image'

I'm trying to draw a sprite to the screen using the class Player, but I get a traceback. It seems to be complaining when I draw the object to the screen, I'm not really sure what's causing it. I'm new to pygame so I figure that there is something that I am using wrong, or that I am missing, that I don't quite understand.

Here is my code:

import pygame
from sys import exit

# initilaization
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption('Bullet hell')

class Player(pygame.sprite.Sprite):
    '''The Main player class'''
    def __init__(self):
        super().__init__()
        self.player_image = pygame.image.load('sprites/player/player.png').convert_alpha()
        self.player_rect = self.player_image.get_rect(topleft = (0, 0))

# Player
player = pygame.sprite.GroupSingle()
player.add(Player())

# main game loop
while True:

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

    player.draw(screen)
    pygame.display.update()

It produces this error:

Traceback (most recent call last):
  File "/home/linkio/Projects/bullet-hell-game/main.py", line 29, in <module>
    player.draw(screen)
  File "/home/linkio/.local/lib/python3.10/site-packages/pygame/sprite.py", line 552, in draw
    zip(sprites, surface.blits((spr.image, spr.rect) for spr in sprites))
  File "/home/linkio/.local/lib/python3.10/site-packages/pygame/sprite.py", line 552, in <genexpr>
    zip(sprites, surface.blits((spr.image, spr.rect) for spr in sprites))
AttributeError: 'Player' object has no attribute 'image'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏夜暖风 2025-02-13 14:13:49

我需要更改我的类属性名称。精灵类似乎是根据特定关键字作为属性来工作的。

class Player(pygame.sprite.Sprite):
    '''The Main player class'''
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load('sprites/player/player.png').convert_alpha()
        self.rect = self.image.get_rect(topleft = (0, 0))

I needed to change my class attribute names. Sprite classes seem to work based on specific keywords as attributes.

class Player(pygame.sprite.Sprite):
    '''The Main player class'''
    def __init__(self):
        super().__init__()
        self.image = pygame.image.load('sprites/player/player.png').convert_alpha()
        self.rect = self.image.get_rect(topleft = (0, 0))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文