位置: IT常识 - 正文

学习 Python 之 Pygame 开发魂斗罗(十)(python 如何学)

编辑:rootadmin
学习 Python 之 Pygame 开发魂斗罗(十) 学习 Python 之 Pygame 开发魂斗罗(十)继续编写魂斗罗1. 解决敌人不开火的问题2. 创建爆炸效果类3. 为敌人跳入河中增加爆炸效果4. 玩家击中敌人继续编写魂斗罗

推荐整理分享学习 Python 之 Pygame 开发魂斗罗(十)(python 如何学),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python怎么学,python语言怎么学,python语言怎么学,python怎样学,python咋学,python 如何学,python语言怎么学,python语言怎么学,内容如对您有帮助,希望把文章链接给更多的朋友!

在上次的博客学习 Python 之 Pygame 开发魂斗罗(九)中,我们让敌人能发射子弹,能移动,这次我们给敌人加上可以被消灭

下面是图片的素材

链接:https://pan.baidu.com/s/1X7tESkes_O6nbPxfpHD6hQ?pwd=hdly 提取码:hdly

1. 解决敌人不开火的问题

不知道为什么,我这次运行代码,发现敌人一直不开火,如果你也遇到了,来看看如何解决吧

当我们运行游戏后,出现了敌人不开火的问题,我们进入敌人1类的fire()函数

加入一行代码,看看是否能进入开火的条件 运行游戏后发现,这个变量一直是True,所以无法进入下面的if语句

我们看看,哪里修改了这个变量

我们找到,修改变量值的地方在主类的updateEnemyPosition()函数中

当敌人进行垂直碰撞检测时,如果敌人脚下没有碰撞体,那么就判定敌人是下落状态,于是敌人的isFalling变量为True了,但是如果敌人脚下有碰撞体,我们应该把isFalling变成True,不然敌人就一直处于下落状态,那么就永远不会开火了

所以,我们加入下方的代码,这样问题就解决了

我们要想一想,为什么敌人会处于下落状态,敌人出来后并没有到达悬崖边,那么是如何处于下落状态的呢?

原来是我们产生敌人的位置距离下方的碰撞体有几个像素,当敌人产生后,下方距离碰撞体有点距离,所以就变了下落状态,又因为陆地碰撞体敌人碰到后不会死亡,所以敌人就会出现不会开火的情况

这个问题解决后,下面我们来写子弹击中敌人

2. 创建爆炸效果类

敌人死亡时,会有爆炸特效,所以我们要先创建爆炸效果类,然后才能写敌人死亡的逻辑

学习 Python 之 Pygame 开发魂斗罗(十)(python 如何学)

首先,在Constants.py中加入爆炸效果的类型,在魂斗罗中,第一关桥也会爆炸,BOSS死亡后也会爆炸,敌人死亡也会爆炸,但是他们的爆炸特效不一样,所以我们要加入一个枚举类,用来枚举出各种爆炸效果

class ExplodeVariety(Enum): CIRCLE = 1 BRIDGE = 2

这里说明了两种爆炸效果,一种是敌人死亡的圆圈爆炸,还有一种是桥的爆炸

下面这个是桥爆炸的特效

下面是敌人死亡的特效 接下来就可以创建爆炸效果类了

class Explode: def __init__(self, object, variety = ExplodeVariety.CIRCLE, isUseTime = False): # 获取爆炸对象的位置 self.rect = object.rect if variety == ExplodeVariety.CIRCLE: self.images = [ loadImage('../Image/Explode/circleExplode1.png'), loadImage('../Image/Explode/circleExplode1.png'), loadImage('../Image/Explode/circleExplode1.png'), loadImage('../Image/Explode/circleExplode1.png'), loadImage('../Image/Explode/circleExplode2.png'), loadImage('../Image/Explode/circleExplode2.png'), loadImage('../Image/Explode/circleExplode2.png'), loadImage('../Image/Explode/circleExplode2.png'), loadImage('../Image/Explode/circleExplode3.png'), loadImage('../Image/Explode/circleExplode3.png'), loadImage('../Image/Explode/circleExplode3.png'), loadImage('../Image/Explode/circleExplode3.png'), ] elif variety == ExplodeVariety.BRIDGE: self.images = [ loadImage('../Image/Explode/bridgeExplode1.png'), loadImage('../Image/Explode/bridgeExplode2.png'), loadImage('../Image/Explode/bridgeExplode3.png'), ] self.index = 0 self.image = self.images[self.index] self.isDestroy = False self.isUseTime = isUseTime self.lastTime = None def draw(self, window, currentTime = None): if self.isUseTime: if currentTime - self.lastTime > 115: # 根据索引获取爆炸对象, 添加到主窗口 # 让图像加载五次,这里可以换成五张大小不一样的爆炸图片,可以实现让爆炸效果从小变大的效果 if self.index < len(self.images): self.image = self.images[self.index] self.index += 1 window.blit(self.image, self.rect) else: self.isDestroy = True self.index = 0 self.lastTime = currentTime else: window.blit(self.image, self.rect) else: # 根据索引获取爆炸对象, 添加到主窗口 # 让图像加载五次,这里可以换成五张大小不一样的爆炸图片,可以实现让爆炸效果从小变大的效果 if self.index < len(self.images): self.image = self.images[self.index] self.index += 1 window.blit(self.image, self.rect) else: self.isDestroy = True self.index = 0

每种爆炸效果是多张图片,为了让爆炸效果的显示的顺畅一点,我给敌人死亡的爆炸效果多加入了几张重复的图片,这样运行起来爆炸效果比较好,当然也可以使用帧率来控制

桥的爆炸效果我用的帧率来控制,所以有个变量isUseTime,如果是True,表示用游戏中的时间来控制图片的加载

3. 为敌人跳入河中增加爆炸效果

首先,在主类中增加爆炸效果列表

其次,创建显示爆炸效果函数

def drawExplode(explodeList): for explode in explodeList: if explode.isDestroy: explodeList.remove(explode) else: if explode.isUseTime: explode.draw(MainGame.window, pygame.time.get_ticks()) else: explode.draw(MainGame.window)

这里由于isUseTime为True时,draw()函数需要多传入一个参数,所以要写if-else语句

最后,在主类中调用显示爆炸特效函数和给敌人加入爆炸特效

给敌人进入河中加入爆炸特效 接下来我们运行一下游戏,看看效果

发现敌人落到河里就爆炸啦

4. 玩家击中敌人

下面给添加玩家子弹击中敌人,敌人死亡

进入子弹类,添加函数

def collideEnemy(self, enemyList, explodeList): for enemy in enemyList: if pygame.sprite.collide_rect(self, enemy): self.isDestroy = True enemy.isDestroy = True explodeList.append(Explode(enemy))

遍历敌人列表,如果当前的子弹碰到了敌人,那么就加入爆炸特效,让敌人的isDestroy为True

然后在主类的drawPlayerOneBullet()函数中,调用函数

接下来运行一下

ok,我们就实现了

本文链接地址:https://www.jiuchutong.com/zhishi/300559.html 转载请保留说明!

上一篇:【Vue】悬浮窗和聚焦登录组件经验总结(vue鼠标悬浮菜单)

下一篇:浅谈人工智能(AI)(浅谈人工智能时代财务会计向管理会计的转型)

  • 小米音响小爱同学怎么连接wifi(小米音响小爱同学app下载)

    小米音响小爱同学怎么连接wifi(小米音响小爱同学app下载)

  • 电脑怎么进oppo官网(电脑怎么进入bios界面)

    电脑怎么进oppo官网(电脑怎么进入bios界面)

  • 微信中如何另起一行(微信中如何另起一个账号)

    微信中如何另起一行(微信中如何另起一个账号)

  • 苹果xappstore下载不了软件

    苹果xappstore下载不了软件

  • 层次型网状型和关系型数据库划分原则是(层次型网状型和关系型数据库划分原则是联系的复杂程度)

    层次型网状型和关系型数据库划分原则是(层次型网状型和关系型数据库划分原则是联系的复杂程度)

  • qq币怎么退款(qqq币怎么退款)

    qq币怎么退款(qqq币怎么退款)

  • 路由器不稳定如何解决(路由器不稳定如何调试)

    路由器不稳定如何解决(路由器不稳定如何调试)

  • 为什么下载不了东西(为什么下载不了六级准考证)

    为什么下载不了东西(为什么下载不了六级准考证)

  • 为什么删除文件提示需要权限(为什么删除文件后磁盘空间还是不变)

    为什么删除文件提示需要权限(为什么删除文件后磁盘空间还是不变)

  • 奇异果TV版怎么倍速(奇异果tv版怎么退出登陆)

    奇异果TV版怎么倍速(奇异果tv版怎么退出登陆)

  • 手机QQ说说删了还显示(手机qq说说删了怎么恢复回来)

    手机QQ说说删了还显示(手机qq说说删了怎么恢复回来)

  • ipadmini3为什么停产(ipad mini老是闪退怎么回事)

    ipadmini3为什么停产(ipad mini老是闪退怎么回事)

  • 对方卸载了soul会怎样(对方卸载了soul.会显示把我拉黑吗)

    对方卸载了soul会怎样(对方卸载了soul.会显示把我拉黑吗)

  • 陌陌拉黑怎么联系对方(陌陌拉黑后怎么找到对方)

    陌陌拉黑怎么联系对方(陌陌拉黑后怎么找到对方)

  • iphone开热点费电吗(iPhone开热点费电吗)

    iphone开热点费电吗(iPhone开热点费电吗)

  • 华为怎么设置屏保图片(华为怎么设置屏保)

    华为怎么设置屏保图片(华为怎么设置屏保)

  • word下划线怎么等长(word下划线怎么删除)

    word下划线怎么等长(word下划线怎么删除)

  • 5g要换手机号码吗(5g要换手机号码怎么办)

    5g要换手机号码吗(5g要换手机号码怎么办)

  • vivoy93手机能计步吗(vivo手机怎么计时)

    vivoy93手机能计步吗(vivo手机怎么计时)

  • 朋友圈能发gif图吗(朋友圈能否发gif)

    朋友圈能发gif图吗(朋友圈能否发gif)

  • 华为nova4充电器型号(华为nova4充电器型号对应表)

    华为nova4充电器型号(华为nova4充电器型号对应表)

  • 手机上边显示hd啥意思(手机上边显示hd12)

    手机上边显示hd啥意思(手机上边显示hd12)

  • 车前草的功效与作用及禁忌(车前草的功效与作用及禁忌症)

    车前草的功效与作用及禁忌(车前草的功效与作用及禁忌症)

  • 分布式实战教程13:ruoyi-vue-pro开发指南(分布式简介)

    分布式实战教程13:ruoyi-vue-pro开发指南(分布式简介)

  • COCO数据集的介绍和使用(coco2017数据集介绍)

    COCO数据集的介绍和使用(coco2017数据集介绍)

  • 递延所得税资产和所得税费用的关系
  • 应交税费账目处理
  • 个人劳务费的免税政策
  • 增值税普通发票和专用发票有什么区别
  • 单位车辆交强险赔付流程
  • 建筑业预收账款如何缴税
  • 半年度奖金怎么算
  • 转业士官自谋职业
  • 净资产出资账务处理流程
  • 施工单位名称变更需要变施工许可证吗
  • 公司租金收入交多少税
  • 公司支付收益权转让怎么做账?
  • 土地租赁费含有多少税率
  • 企业多扣个税怎么处理
  • 公司租车税务处理办法
  • 红字增值税专用发票信息表能作废吗
  • 金税盘服务费可以当月抵扣吗
  • 固定健身器械使用方法
  • 发票丢失罚款标准要看金额吗
  • 根据规定签发汇票凭证必须记载的事项有
  • 跨月发票作废怎么红冲
  • win11玩游戏怎样
  • 电脑开wifi给手机用好吗
  • win10系统怎么设置
  • windows环境下,ping的功能和使用方法
  • 详解金球奖之争
  • 一品红叶发黄咋回事儿
  • 基于thinkphp的cms
  • php静态方法和非静态方法
  • vuex中this.$store.commit和this.$store.dispatch的用法
  • 特征融合add
  • 可转债公允价值变动计入
  • 企业所得税汇算清缴操作流程
  • 与上级往来的会计科目的题目
  • 什么是社会团体组织
  • 电子软件是如何诞生的
  • 研发费用资本化可以加计扣除吗
  • 如何用织梦在本地搭建网站
  • php中isset函数作用
  • 帝国cms使用手册
  • 基于vue的开源甘特图控件
  • 社保缴费是当月扣当月的吗
  • 作废的发票要装订记账凭证吗
  • 外出经营流程
  • 会计专业技术资格初级是什么职称
  • 逾龄资产对企业的影响
  • 失控发票要转出成本吗
  • 财产转让收入属于什么收入
  • 未担保余值举例
  • 实物投资需要缴纳增值税吗
  • 资本公积的来源和用途
  • 少交税款滞纳金
  • 现金存入银行是什么凭证
  • 水利建设基金可以零申报吗
  • 开了票收不到钱怎么做账
  • 没有开票的收入要交增值税吗
  • 固定资产净值怎么算
  • myeclipse连接mysql数据库代码
  • sql语句行转列
  • 全面解析皮炎
  • sqlserver通用的删除服务器上的所有相同后缀的临时表
  • linux如何安装c语言编译器
  • xp系统没有任何图标
  • ubuntu 16:9
  • svcinit.exe - svcinit是什么进程
  • win 7组策略
  • neo是什么意思中文翻译
  • cocos2dx游戏案例
  • unityz
  • 谈一谈js中的执行者是谁
  • xbox无法连接无线网络
  • android list
  • angular ngshow
  • python日志管理系统
  • 安卓框架是什么怎么用
  • 工会经费怎么缴纳不了
  • 上海市浦东新区公租房
  • 食堂增值服务有哪些
  • 如何理解涉税零风险概念
  • 局党组中心组成员
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设