为什么我的飞机飞到底部没有消失,我调用的只是父类move_down啊

为什么我的飞机飞到底部没有消失,我调用的只是父类move_down啊

import random

import pygame

import constants
from game.bullet import Bullet


class Plane(pygame.sprite.Sprite):
    """
    飞机的基类
    """
    #     # 飞机的图片
    #     plane_images = []
    #     # 飞机爆炸的图片
    #     destroy_images = []
    #     # 坠毁的音乐地址
    #     down_sound_src = None
    #     # 飞机的状态:True 活得,False 死的
    #     active = True
    #     # 该飞机发射的子弹精灵组
    bullets = pygame.sprite.Group()

    def __init__(self,screen, speed=None):
        super().__init__()
        self.screen = screen
        # 加载静态资源
        self.img_list = []
        self._destroy_img_list = []
        self.down_souund = None
        self.load_src()

        #飞机飞行的速度
        self.speed = speed or 10
        # 获取飞机的位置
        self.rect = self.img_list[0].get_rect()

        #飞机的高度和高度
        self.plane_w,self.plane_h = self.img_list[0].get_size()

        #游戏窗口的高度和宽度
        self.width,self.height = self.screen.get_size()

        # 改变飞机的初始化位置,放在屏幕下方
        self.rect.left = int((self.width - self.plane_w) / 2)
        self.rect.top = int(self.height / 2)

    def load_src(self):
        """加载静态资源"""
        # 飞机的图像
        for img in self.plane_images:
            self.img_list.append(pygame.image.load(img))
        # 飞机坠毁的图像
        for img in self.destroy_images:
            self._destroy_img_list.append(pygame.image.load(img))
        # 坠毁的音乐
        if self.down_sound_src:
            self.down_sound = pygame.mixer.Sound(self.down_sound_src)

    @property
    def image(self):
        return self.img_list[0]

    def blit_me(self):
        self.screen.blit(self.image,self.rect)

    def move_up(self):
        """飞机向上移动"""
        self.rect.top -= self.speed

    def move_down(self):
        """飞机向下移动"""
        self.rect.top += self.speed

    def move_left(self):
        """飞机向左移动"""
        self.rect.left -= self.speed

    def move_right(self):
        """ 飞机向右移动 """
        self.rect.right += self.speed

    def broken_down(self):
        """飞机坠毁效果"""
        #1.播放坠毁音乐
        if self.down_sound:
            self.down_sound.play()
        #2.播放坠毁的动画
        for img in self._destory_img_list:
            self.screen.blit(img,self.rect)
        #3.坠毁后
        self.active = False

    def shoot(self):
        """飞机发射子弹"""
        bullet = Bullet(self.screen,self,30)
        self.bullets.add(bullet)

class OurPlane(Plane):
    """我方的飞机"""
    #飞机的图片
    plane_images = constants.OUR_PLANE_IMG_LIST
    #飞机爆炸的图片
    destroy_images = constants.OUR_DESTROY_IMG_LIST
    #坠毁的音乐地址
    down_sound_src = None


    def update(self,frame):
        """更新飞机动画的效果"""
        if frame%5:
            self.screen.blit(self.img_list[0],self.rect)
        else:
            self.screen.blit(self.img_list[1],self.rect)


    def move_up(self):
        """向上移动,超出范围之后,拉回来"""
        super().move_up()
        if self.rect.top <= 0:
            self.rect.top = 0


    def move_down(self):
        super().move_down()
        if self.rect.top >= self.height - self.plane_h:
            self.rect.top = self.height - self.plane_h

    def move_left(self):
        super().move_left()
        if self.rect.left <= 0:
            self.rect.left = 0

    def move_right(self):
        super().move_right()
        if self.rect.left >= self.width - self.plane_w:
            self.rect.left = self.width - self.plane_w


class SmallEnemyPlane(OurPlane):
    """敌方小型的飞机"""
    # 飞机的图片
    plane_images = constants.SMALL_ENEMY_PLANE_IMG_LIST
    # 飞机爆炸的图片
    destroy_images = constants.SMALL_ENEMY_DESTROY_IMG_LIST
    # 坠毁的音乐地址
    down_sound_src = constants.SMALL_ENEMY_DOWN_SOUND

    def __init__(self,screen,speed):
        super().__init__(screen,speed)
        #每次生成新的小型飞机的时候,随机的位置出现在屏幕中
        #改变飞机的随机位置
        self.init_pos()

    def init_pos(self):
        """改变飞机的随机位置"""
        # 屏幕中的宽度-飞机的宽度
        self.rect.left = random.randint(0, self.width - self.plane_w)
        # 屏幕之外随机高度
        self.rect.top = random.randint(-5 * self.plane_h,-self.plane_h)

    def update(self,*args):
        """更新飞机的移动"""
        super().move_down()

        #画在屏幕上
        self.blit_me()

        #超出范围后如何处理
        #1.重用
        if self.rect.top >= self.height:
            self.active = False
            #self.kill()
            self.reset()
        # todo 2.多线程、多进程

    def reset(self):
        """重置飞机的状态,达到复用的效果"""
        self.active = True
        # 改变飞机的随机位置
        self.init_pos()


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
提问者 Akien 2019-11-08 01:27:39

找到问题了 ourplane里的move_down覆盖了敌方飞机里的movedown

  • 同学,你好。同学发现问题和解决问题的能力很棒,继续加油!祝学习愉快~~~~~
    2019-11-08 09:47:25
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师