涉及的内容《Python编程:从入门到实践》一书里《外星人大战》项目
1.有警告提示的代码 self.aliens.add(alien),里面传入的alien给了警告
def _create_alien(self, alien_number, row_number):
"""创建一个外星人并将其加入当前行。"""
alien = Alien(self)
alien_width, alien_height = alien.rect.size
alien.x = alien_width + 2 * alien_width * alien_number
alien.rect.x = alien.x
alien.rect.y = alien.rect.height + 2 * alien.rect.height * row_number
self.aliens.add(alien)
2.报错内容:Expected type '_SpriteSupportsGroup | AbstractGroup[_SpriteSupportsGroup | Any] | Iterable[_SpriteSupportsGroup | Any] | Any' (matched generic type '_TSprite | AbstractGroup[_TSprite] | Iterable[_TSprite]'), got 'Alien' instead
3.查证了Alien类,Alien类也继承了Sprite,类型应该正确才对。搞不懂为什么会报错。
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
"""表示单个外星人的类。"""
def __init__(self, ai_game):
"""初始化外星人并设置其起始位置。"""
super().__init__()
self.screen = ai_game.screen
self.settings = ai_game.settings
# 加载外星人图像并设置其rect属性
self.image = pygame.image.load('images/alien.bmp')
self.rect = self.image.get_rect()
# 每个外星人最初都在屏幕左上角附近。
self.rect.x = self.rect.width
self.rect.y = self.rect.height
# 存储外星人的精确水平位置。
self.x = float(self.rect.x)
4.系统是win10家庭版,软件用的PyCharm 版本信息:2022.3.2
5.希望有知道的伙伴指导一二
该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据报错信息,可能是因为self.aliens不是一个有效的Sprite组。请确认self.aliens是如下形式之一:
同时,请确保在实例化self.aliens之前已经导入了pygame.sprite模块,例如:
import pygame
from pygame.sprite import Sprite, Group
如果还有问题,请提供完整的代码和完整的错误信息,以便更好地帮助您解决问题。
下面就是相关的部分代码,警告应该也是从这里面找原因
主程序的部分主要代码
import pygame
self.aliens = pygame.sprite.Group()
Alien类的部分主要代码
import pygame
from pygame.sprite import Sprite
class Alien(Sprite):
"""表示单个外星人的类。"""
def __init__(self, ai_game):
"""初始化外星人并设置其起始位置。"""
super().__init__()