鱼C论坛

 找回密码
 立即注册
查看: 757|回复: 0

关于精灵模块

[复制链接]
发表于 2021-11-26 21:14:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码中的游戏主循环方法的self.bullets.update()为什么可以直接调用 Bullet模块的update()方法,鱼油们棒棒忙


import sys

import pygame

from set_up import Set_up

from ship import Ship

from bullet import Bullet
class Flank_flre:
    """管理侧面射击的类"""
    def __init__(self):
        """初始化游戏并创建游戏资源"""
        pygame.init()

        #实例化用于储存设置的类
        self.set = Set_up()

        self.screen = pygame.display.set_mode((self.set.screen_width,
                                              self.set.screen_height))
        #设置窗口标题
        pygame.display.set_caption("侧面射击")

        self.ship = Ship(self)
        #创建一个用于保存和管理精灵的容器类
        self.bullets = pygame.sprite.Group()


    def run_game(self):
        """游戏主循环"""
        while True:
            self._event_()
            self.ship.update()
            self.bullets.update()
            self._dra_screen()
            
    def _event_(self):
        """响应键盘和鼠标事件"""
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                self._event_down(event)
            elif event.type == pygame.KEYUP:
                self._event_up(event)

    def _event_down(self,event):
        """响应键盘按下事件"""
        if event.key == pygame.K_UP:
            self.ship.moving_top = True
        elif event.key == pygame.K_DOWN:
            self.ship.moving_bottom = True
        elif event.key == pygame.K_SPACE:
            self._file_bullet()

    def _event_up(self,event):
        """响应键盘松开事件"""
        if event.key == pygame.K_UP:
            self.ship.moving_top = False
        elif event.key == pygame.K_DOWN:
            self.ship.moving_bottom = False

    def _file_bullet(self):
        """创建一颗子弹"""
        new_bullet = Bullet(self)
        self.bullets.add(new_bullet)
               
    def _dra_screen(self):
         #每次循环重新绘制屏幕
        self.screen.fill(self.set.screen_color)
        self.ship.blitme()
        for bullet in self.bullets.sprites():
            bullet.draw_bullet()
        #让最近绘制的屏幕可见
        pygame.display.flip()

if __name__ == '__main__':
    game = Flank_flre()
    game.run_game()

______________________

import pygame

from pygame.sprite import Sprite

class Bullet(Sprite):
    """管理飞船发射子弹的类"""
    def __init__(self,game):
        super().__init__()
        self.screen = game.screen
        self.set = game.set
        self.color = self.set.bullet_color

        #在(0,0)处创建一个子弹的矩形,在设置正确位置
        self.rect = pygame.Rect(0,0,self.set.bullet_width,
                            self.set.bullet_height)

        self.rect.midright = game.ship.rect.midright
   
        self.x = float(self.rect.x)

    def update(self):
        #向右移动子弹
        self.x += self.set.bullet_speed
        #更新表示子弹的rect位置
        self.rect.x = self.x

    def draw_bullet(self):
        """在屏幕上绘制子弹"""
        pygame.draw.rect(self.screen,self.color,self.rect)



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-4 12:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表