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

  • 华为平板语音助手怎么唤醒(华为平板语音助手怎么开启)

    华为平板语音助手怎么唤醒(华为平板语音助手怎么开启)

  • 账号注册地暂不支持微信支付(注册账号了怎么显示不存在)

    账号注册地暂不支持微信支付(注册账号了怎么显示不存在)

  • 微信打字就卡死怎么办(微信打字就卡死什么原因)

    微信打字就卡死怎么办(微信打字就卡死什么原因)

  • 微信怎么解除频繁登录(微信视频怎么解除)

    微信怎么解除频繁登录(微信视频怎么解除)

  • 变频器rev是什么意思(变频器故障rev)

    变频器rev是什么意思(变频器故障rev)

  • 无线网无ip分配是什么意思(无线网无ip分配是手机原因吗)

    无线网无ip分配是什么意思(无线网无ip分配是手机原因吗)

  • 电脑突然自动关机了再按电源打不开(电脑突然自动关机重启)

    电脑突然自动关机了再按电源打不开(电脑突然自动关机重启)

  • 手机卡虚拟卡和实体卡的区别(手机卡虚拟卡和实体卡)

    手机卡虚拟卡和实体卡的区别(手机卡虚拟卡和实体卡)

  • 快手下载视频会通知吗(快手下载视频会侵权吗)

    快手下载视频会通知吗(快手下载视频会侵权吗)

  • 蓝牙信号弱怎么解决(蓝牙 信号差)

    蓝牙信号弱怎么解决(蓝牙 信号差)

  • redminote7是什么手机型号(redmi7a是什么手机)

    redminote7是什么手机型号(redmi7a是什么手机)

  • 隔空投送最多传多少张照片(隔空投送最多传多少个视频)

    隔空投送最多传多少张照片(隔空投送最多传多少个视频)

  • airpods pro后面的按钮是干嘛的(airpods pro后面的按钮没反应)

    airpods pro后面的按钮是干嘛的(airpods pro后面的按钮没反应)

  • 怎么关掉windows安全中心(怎么关掉windows许可证即将过期的提示)

    怎么关掉windows安全中心(怎么关掉windows许可证即将过期的提示)

  • 拼多多拼单什么意思(拼多多拼单什么规则)

    拼多多拼单什么意思(拼多多拼单什么规则)

  • 手机运行内存不足怎么办(手机运行内存不足怎么处理)

    手机运行内存不足怎么办(手机运行内存不足怎么处理)

  • 苹果充电插口什么材质(苹果充电口叫什么口)

    苹果充电插口什么材质(苹果充电口叫什么口)

  • ppt超级链接在哪(ppt2003超级链接)

    ppt超级链接在哪(ppt2003超级链接)

  • vivo照片回收站在哪里(vivo照片回收站删除了怎么找)

    vivo照片回收站在哪里(vivo照片回收站删除了怎么找)

  • 苹果手机如何连接米家扫地机器人(苹果手机如何连接电脑传文件)

    苹果手机如何连接米家扫地机器人(苹果手机如何连接电脑传文件)

  • 三星s9可以使用分屏吗(三星s9可以插电信卡吗)

    三星s9可以使用分屏吗(三星s9可以插电信卡吗)

  • 今日头条如何转发(今日头条如何转发视频赚钱)

    今日头条如何转发(今日头条如何转发视频赚钱)

  • 淘口令不自动弹出(淘口令不自动弹出Ios16)

    淘口令不自动弹出(淘口令不自动弹出Ios16)

  • uniapp适配问题(uniapp怎么做适配)

    uniapp适配问题(uniapp怎么做适配)

  • 增值税发票阅读器干什么用的
  • 外贸 代理
  • 买房契税缴纳比例
  • 个人所得税的税目分多少种
  • 税收优惠政策落实情况报告
  • 什么情况下一般纳税人可以简易征收
  • 投标成交服务费
  • 年终奖1月发放能算上一年吗
  • 单一环节征税有哪些类型
  • 个体户核定5万每个月要交多少税钱
  • 补缴企业所得税的计算公式
  • 收到的房租增值税专用发票可以抵扣吗
  • 法人变更注册资金降低以前的债务怎么处理
  • 当月未收到进项票怎么处理
  • 企业向个人借款需要交印花税吗
  • 转让部分股份流程
  • 印花税已经缴纳了但是还未申报
  • 网银年费属于财务费用哪一项
  • 企业缴纳的社保怎么查询
  • 个体户不到3万怎么报税需要花钱吗
  • 付敏科技有限公司官网
  • 原材料增值税怎么算
  • 固定资产装修费用计入房产税吗
  • 公司支付的赔偿款计入什么会计科目
  • 投资合伙企业对公司有债务责任吗
  • 暂估冲红的分录怎么写
  • steam打开速度
  • win7桌面图标变成了lnk
  • mac怎么彻底删除一个软件
  • 如何保护word文件不被他人修改
  • pps是啥文件
  • php中的require
  • 主播录屏软件哪个好
  • 国有控股公司改制
  • 坏账准备属于哪一类账户
  • 建筑工程房屋租赁费属于什么费用
  • 兼职老师工资怎么扣税
  • php对接第三方支付教程
  • 质量事故发生后,有责任就所发生的质量事故
  • 小微企业免征增值税优惠
  • 对公账号里面的钱会扣税吗
  • 垃圾处置费的收费标准
  • 注册公司冠名省需要多少注册资金
  • 人防车库成本能抵扣吗
  • 自动执行python
  • 预收账款的销售分录
  • python中lambda用法
  • 在sqlserver2008中
  • db2入门视频教程
  • sql server 2008数据库引擎等安装失败
  • 年度奖金个税计算器
  • 预包装的标签有哪几种
  • 公司支付的劳务费如何走不用交税
  • 民办非企业单位免税
  • 到期不续约补偿金怎么算
  • 税控盘费用抵扣怎么申报什么表怎么说什么表怎么填报
  • 工商注册资本什么意思
  • 采用账龄分析法计提坏账准备
  • sql-3
  • Mysql inner join on的用法实例(必看)
  • win7快速安装
  • imac 5k屏幕参数
  • linux的ps命令用法
  • desl.exe是什么
  • linux命令怎么执行
  • cocos2d
  • 触发器csdn
  • assetstore怎么下载资源包
  • 学习名言警句 励志
  • css布局的经典网站
  • 置顶聊天的人怎么不见了
  • android activity回调函数
  • linux怎么ssh远程
  • 总体把握是什么意思
  • python快速排序最简单写法
  • 小规模纳税人网上开专票流程
  • 工商税务登记流程视频
  • 税控系统减免税报表里
  • 广西城建投资集团官网
  • 普惠性和非普惠的区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设