pygame小游戏飞机大战_8继承精灵玩家优化

为了实现碰撞消失的功能,使用继承精灵进行对玩家的优化

复制代码
# 引入飞机的类
class Plane(pygame.sprite.Sprite):
    # 创建玩家的方法,引入screen模块
    def __init__(self, screen):
        # 引入图片创建玩家
        self.player = pygame.image.load("./images/me1.png")
        self.image=self.player
        # 设置速度变量
        self.speed = 10
        # 调用继承精灵初始化方法
        pygame.sprite.Sprite.__init__(self)
        # 根据图片进行获取矩形对象
        self.rect =  self.image.get_rect()
        self.rect.topleft = [179,500]
        self.x = 179
        self.y = 500
        # 使screen变为飞机类的一个属性
        self.screen = screen
        # 定义装子弹的列表
        self.bullets = pygame.sprite.Group()

    # 定义update方法包含检测指令和绘制
    def update(self):
        self.key_control()
        self.display()
    # 创建玩家移动的方法
    def key_control(self):
        # 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动
        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            self.rect.top -= self.speed
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            self.rect.right+= self.speed
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            self.rect.left -= self.speed
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            self.rect.bottom += self.speed
        if key_pressed[K_SPACE]:
            # 按下空格键发射子弹
            bullet = Bullet(self.screen, self.rect.left, self.rect.top)
            # 将子弹存入列表
            self.bullets.add(bullet)

    def display(self):
        # 绘制玩家
        self.screen.blit(self.player, self.rect)
        # 更新子弹坐标
        self.bullets.update()
        # 绘制所有子弹到屏幕
        self.bullets.draw(self.screen)

与原本代码的对比

复制代码
# 引入飞机的类
class Plane(object):
    # 创建玩家的方法,引入screen模块
    def __init__(self, screen):
        # 引入图片创建玩家
        self.player = pygame.image.load("./images/me1.png")
        # 设置速度变量
        self.speed = 10

        self.x = 179
        self.y = 500
        # 使screen变为飞机类的一个属性
        self.screen = screen
        # 定义装子弹的列表
        self.bullets = []

    # 创建玩家移动的方法
    def key_control(self):
        # 判断按下键盘事件,对玩家x,y坐标进行调整使玩家移动
        key_pressed = pygame.key.get_pressed()
        if key_pressed[K_w] or key_pressed[K_UP]:
            self.y -= self.speed
        if key_pressed[K_d] or key_pressed[K_RIGHT]:
            self.x += self.speed
        if key_pressed[K_a] or key_pressed[K_LEFT]:
            self.x -= self.speed
        if key_pressed[K_s] or key_pressed[K_DOWN]:
            self.y += self.speed
        if key_pressed[K_SPACE]:
            # 按下空格键发射子弹
            bullet = Bullet(self.screen, self.x, self.y)
            # 将子弹存入列表
            self.bullets.append(bullet)

    def display(self):
        # 绘制玩家
        self.screen.blit(self.player, (self.x, self.y))
        # 遍历所有子弹
        for bullet in self.bullets:
            # 引入让子弹飞起来的方法
            bullet.auto_move()
            # 显示子弹
            bullet.display()
相关推荐
chao_789几秒前
Union 和 Optional 区别
开发语言·数据结构·python·fastapi
程序员晚枫23 分钟前
深度解析:Python中处理PDF的库有很多,我应该选择哪一个?
python
我的xiaodoujiao1 小时前
Web UI自动化测试学习系列5--基础知识1--常用元素定位1
windows·python·学习·测试工具
SamsongSSS1 小时前
Django之APPEND_SLASH配置爬坑
后端·python·django
扑克中的黑桃A1 小时前
Python快速入门专业版(十):字符串特殊操作:去除空格、判断类型与编码转换
python
en-route2 小时前
深入理解 Scikit-learn:Python 中最常用的机器学习库
python·机器学习·scikit-learn
努力还债的学术吗喽2 小时前
PyTorch nn.Linear 终极详解:从零理解线性层的一切(含可视化+完整代码)
人工智能·pytorch·python·深度学习·基础组件·线性层·nn.linear
宸津-代码粉碎机3 小时前
Redis 进阶:跳出缓存局限!7 大核心场景的原理与工程化实践
java·人工智能·redis·python
极客代码4 小时前
第五篇:后端优化——位姿图的灵魂--从图优化到滑动窗口的联合状态估计
python·深度学习·计算机视觉·视觉里程计·slam·回环检测·地图构建
程序员小白条5 小时前
度小满运维开发一面
java·运维·python·职场和发展·运维开发