位置: 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)(浅谈人工智能时代财务会计向管理会计的转型)

  • iqoo8pro怎么设置通知栏样式(iQOO8pro怎么设置双系统)

    iqoo8pro怎么设置通知栏样式(iQOO8pro怎么设置双系统)

  • 手机打电话自动录音怎么取消(手机打电话自动录音怎么设置)

    手机打电话自动录音怎么取消(手机打电话自动录音怎么设置)

  • 第一代计算机网络又称为(第一代计算机网络由什么组成系统)

    第一代计算机网络又称为(第一代计算机网络由什么组成系统)

  • 手机qq多久不动就显示离线(手机qq多久不动就显示4g)

    手机qq多久不动就显示离线(手机qq多久不动就显示4g)

  • 微信申请的收款码怎么查快递(微信申请的收款码可以刷信用卡吗)

    微信申请的收款码怎么查快递(微信申请的收款码可以刷信用卡吗)

  • 电脑右下角的时间日期不见了怎么办(电脑右下角的时间怎么显示年月日)

    电脑右下角的时间日期不见了怎么办(电脑右下角的时间怎么显示年月日)

  • oppo find x2和pro什么区别(oppo find x2和find x2pro)

    oppo find x2和pro什么区别(oppo find x2和find x2pro)

  • 第三代计算机采用的主要逻辑部件是(第三代计算机采用的逻辑元件是)

    第三代计算机采用的主要逻辑部件是(第三代计算机采用的逻辑元件是)

  • 苹果替用面容是干嘛的(iphone替用面容可以支付吗)

    苹果替用面容是干嘛的(iphone替用面容可以支付吗)

  • iphone8续航时间(iphone8的续航)

    iphone8续航时间(iphone8的续航)

  • softap模式是什么意思(soft oa)

    softap模式是什么意思(soft oa)

  • 手机连拍怎么设置(手机连拍在哪里设置间隔时间)

    手机连拍怎么设置(手机连拍在哪里设置间隔时间)

  • 系统界面无响应怎么办(系统界面无响应,要将其关闭吗?)

    系统界面无响应怎么办(系统界面无响应,要将其关闭吗?)

  • 快手怎么不能查找了(快手怎么不能查看别人的粉丝)

    快手怎么不能查找了(快手怎么不能查看别人的粉丝)

  • 麒麟710用多久会卡(麒麟710的手机还能再用几年)

    麒麟710用多久会卡(麒麟710的手机还能再用几年)

  • 页眉页脚在哪个选项卡(页眉页脚在哪个位置)

    页眉页脚在哪个选项卡(页眉页脚在哪个位置)

  • iphone11如何双卡双待(iphone11 如何双卡)

    iphone11如何双卡双待(iphone11 如何双卡)

  • 热点新闻弹窗怎么删除(热点新闻 弹窗)

    热点新闻弹窗怎么删除(热点新闻 弹窗)

  • 华为荣耀手环4如何强制重启(华为荣耀手环4running使用说明)

    华为荣耀手环4如何强制重启(华为荣耀手环4running使用说明)

  • 复制粘贴的朋友圈怎么不被折叠(复制粘贴的朋友圈文字怎么显示不全)

    复制粘贴的朋友圈怎么不被折叠(复制粘贴的朋友圈文字怎么显示不全)

  • 公众号留言功能恢复(公众号留言功能怎么开启)

    公众号留言功能恢复(公众号留言功能怎么开启)

  • windows如何设置开机密码(windows如何设置桌面背景)

    windows如何设置开机密码(windows如何设置桌面背景)

  • 手机3gb和4gb有什么区别(4g手机和3g手机的区别在哪)

    手机3gb和4gb有什么区别(4g手机和3g手机的区别在哪)

  • 为什么陌陌发不出信息(为什么陌陌发不出去照片)

    为什么陌陌发不出信息(为什么陌陌发不出去照片)

  • 如何确定我的Mac或Linux是否易受到Shellshock攻击?(如何确定我的世界的区块)

    如何确定我的Mac或Linux是否易受到Shellshock攻击?(如何确定我的世界的区块)

  • Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法

    Uncaught TypeError TypeError: Cannot set properties of null (setting ‘onclick‘)的解决办法

  • 应收账款贷方余额怎么调平
  • 建筑安装服务的发票
  • 建筑公司购入的水泥等材料如果是做成本的怎么做分录
  • 差额征税专用发票如何开
  • 金税三期电子发票怎么领取
  • 进项税转出主要内容包括
  • 畜牧生物工程有限公司
  • 上个月普通发票怎么作废
  • 善意取得虚开专票的条件包括
  • 退休工资的个人账户怎么算
  • 支付拆迁补偿款
  • 公司没有缴纳住房公积金离职能要求补缴吗
  • 2016年的发票可以用到什么时候
  • 国税申报数据能修改吗
  • 公司让员工发红包
  • 活动策划费可以开专票吗
  • 企业应交增值税的计算公式
  • 注册资金印花税什么时候开始交
  • 银行定期存款的利息是每个月给你吗
  • 社保跨省转移社保流程
  • 原材料进口关税计入成本吗
  • 债权人和债务人是什么意思
  • 苹果系统中怎么删除软件
  • php多表联合查询
  • php实用的案例
  • 计算机指令用来做什么
  • php fopen()
  • 哈利法塔里面有什么
  • 工会经费计税依据是上年工资还是当年工资
  • opencv的函数
  • php socket编程
  • 给兼职员工的劳动补贴
  • 根据银行回单做流水账单
  • 免税农产品包括30万元吗
  • 现金折扣什么时候冲减收入
  • 企业贷款贴息怎么做账
  • 合伙股权退出机制
  • 社会团体要求
  • 负债类科目有借贷方向吗
  • 企业所得税多预缴了怎么办
  • MYSQL数据库技术基础
  • 增值税勾选统计后如何导出明细表
  • 印花税凭证名称如何选择
  • 现金流量表中应收账款为负是什么意思
  • 委托加工物资核算
  • 企业的应付职工薪酬属于流动负债
  • 母公司和子公司是两个完全独立的法人
  • 以前年度损益调整在报表哪里体现
  • abc类企业的划分
  • 实收资本认缴怎么做账,要做账吗
  • 上年度多计提的附加税怎么办
  • 总分类账的依据
  • supervisor.sock refused connection
  • windowsxp不能启动怎么修复
  • win7系统设置打印机共享
  • 两台苹果怎么用电脑把数据同步
  • windows7 记事本
  • win8怎么格式化硬盘
  • window系统怎么复制粘贴
  • win7系统任务栏跑到右侧怎么办
  • win10技巧 新功能
  • win10命令提示符哪里打开
  • unix & linux
  • win8显示屏亮度调节
  • Windows7电脑怎么调整屏幕亮度
  • 无法启动.dll
  • js框架的作用
  • python语言如何获取随机整数
  • Node.js中的核心模块包括哪些内容?
  • opencv for python
  • vbs运行cmd命令
  • js debounce实现
  • 安卓压缩图片
  • 使用jquery实现的项目
  • pycharm sftp
  • 消费税由消费者承担吗
  • 四川国税发票手机查询
  • 集体土地征收应该有哪些文件
  • 财税65号第一条
  • 个人所得税怎么填写子女教育
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设