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

外星人入侵相关游戏中,对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 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试