不知道能不能表达清楚,我在第一个代码块中将self.bullets.update()改为self.bullets.updates(),
将第二个代码块的def update(),改为def updates()后运行出错,说Group()中没有updates属性,就是说self.bullets.update()的update()是Group()自带的吗,那为什么Group()的update()有和Bullet()的update()一样的功能,这两个update()是如何等价起来的
mport sys
import pygame
from settings import Settings
from ship import Ship
from bullet import Bullet
class AlienInvasion:
"""管理游戏资源和行为的类"""
def __init__(self):
"""初始化游戏并创建游戏资源"""
pygame.init()#初始化背景设置
self.settings = Settings()# 创建设置实例
self.screen = pygame.display.set_mode((0,0),pygame.FULLSCREEN)# 返回对象surface,建立1200宽800高的显示窗口
self.settings.screen_width = self.screen.get_rect().width
self.settings.screen_height = self.screen.get_rect().height
pygame.display.set_caption('Alien Invasion')# 窗口标题
self.ship = Ship(self) # 创建调用的类的实例
self.bullets = pygame.sprite.Group() # 创建储存子弹的编组
def run_game(self):
"""开始游戏主循环,退出、移动、显示"""
while True:
"""事件循环,监视键盘鼠标事件"""
self._check_events() # 使用辅助方法要在其前加self.
self.ship.update() # 对实例使用方法,更新飞船位置
self.bullets.update() # 对编组使用bullet.update()方法
self._update_screen() # 更新屏幕
import pygame
from pygame.sprite import Sprite
class Bullet(Sprite): # sprite可将相关元素即子弹实例编组
def __init__(self,ai_game):
"""在飞船当前位置创建一个子弹对象"""
super().__init__()
self.screen = ai_game.screen
self.settings = ai_game.settings
self.color = self.settings.bullet_color
# 先创建矩形,再设置位置
self.rect = pygame.Rect(0,0,self.settings.bullet_width,
self.settings.bullet_height)
self.rect.midtop = ai_game.ship.ship_rect.midtop
# 存储用小数表示的子弹位置
self.y = float(self.rect.y)
def update(self):
"""向上移动子弹"""
self.y -= self.settings.bullet_speed
self.rect.y = self.y