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

外星人入侵相关游戏中,对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方法。

    已采纳该答案
    打赏 评论

相关推荐 更多相似问题