关于精灵组

关于精灵组

关于精灵组 我有如下理解。

Bullet.py 中 class Bullet(pygame.sprite.Sprite): 中定义了方法update(self, *args):

plane.py 中class Plane(pygame.sprite.Sprite): 中定义了属性

 bullets = pygame.sprite.Group()

 以及方法

def shoot(self):
   """ 飞机发射子弹 """
   bullet = Bullet(self.screen, self, 15)
   self.bullets.add(bullet)

当 键盘按键为空格时,调用shoot 方法,实例化一个Bullet类的实例:bullet, 并且利用 add 方法把这个实例装入到精灵组中,在main.py 中 status=1 是 使用our_plane.bullets.update(),对精灵组中的实例实现 Bullet类中的update 方法

问题如下: 为什么要定义bullets= pygame.sprite.Group(),为什么一定要定义在飞机类之下,为什么再main.py 的主循环之外实例化一个 pygame.sprite.Group() : b= pygame.sprite.Group() ,然后 在主循环内使用 b.update 不能实现子弹发射的功能?,为换言之,为什么调用pygame.sprite.Group()中的方法 必须使用 pygame.sprite.Sprite 子类的属性作为实例对象?为什么也不可以直接 pygame.sprite.Group.update() 来调用类方法?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
慕之熠_灿烈 2020-02-12 15:31:36

同学,你好。

首先需要明确一个概念:飞机类和子弹类都属于精灵组的子类,那么要依靠pygame库来实现飞机大战功能,就要在自定义的类中继承该父类,定义在Plane类中,是为了按照面向对象的方式来方便控制飞机移动和子弹发射功能实现。

其次主循环之外设置精灵组,在主循环之内调用update( ) 的方法不符合面向对象开发的规则,飞机的功能就应该定义在飞机类中,子弹的功能就应该定义在子弹类中,在main中就应该是控制游戏运行的相关的逻辑代码。

最后,按照视频中的开发方式,除了满足面向对象开发原则之外,也是为了后续的可维护性更好。

如果我的回答解决了您的疑惑,请采纳!祝~学习愉快~


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师