d1857340 2021-07-26 17:39 采纳率: 100%
浏览 141
已结题

外星人入侵相关游戏中,对self.bullets使用方法update()的问题

不知道能不能表达清楚,我在第一个代码块中将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


  • 写回答

1条回答 默认 最新

  • 八云黧 2021-07-26 17:50
    关注

    Group是pygame自带的类,它有一个update方法,该方法中会调用该Group实例中储存的所有Sprite实例的update方法。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月3日
  • 已采纳回答 7月26日
  • 创建了问题 7月26日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,