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

  • 怎样运用百科类站点推广网站?(百科怎么学)

    怎样运用百科类站点推广网站?(百科怎么学)

  • google地球无法连接验证服务器以激活(google地球无法连接验证服务器)(google地球无法连接到登录服务器)

    google地球无法连接验证服务器以激活(google地球无法连接验证服务器)(google地球无法连接到登录服务器)

  • 淘宝支付设置在哪设置(淘宝支付设置在哪儿找)

    淘宝支付设置在哪设置(淘宝支付设置在哪儿找)

  • 华为和荣耀的区别(华为和荣耀的区别大吗)

    华为和荣耀的区别(华为和荣耀的区别大吗)

  • 迅雷下载0kb什么情况(迅雷下载为0)

    迅雷下载0kb什么情况(迅雷下载为0)

  • 个人微信二维码收款限额多少(个人微信二维码会过期吗)

    个人微信二维码收款限额多少(个人微信二维码会过期吗)

  • 微信群怎么撤回超过两分钟的消息(微信群怎么撤回图片)

    微信群怎么撤回超过两分钟的消息(微信群怎么撤回图片)

  • 消息已发出但被对方拒收对方能看到消息吗(消息已发出但被对方拒收了是被删除好友了吗)

    消息已发出但被对方拒收对方能看到消息吗(消息已发出但被对方拒收了是被删除好友了吗)

  • 照相机的物距和像距是什么(照相机的物距和像距分别是什么)

    照相机的物距和像距是什么(照相机的物距和像距分别是什么)

  • 手机来电不显示号码是怎么回事(手机来电不显示来电屏幕)

    手机来电不显示号码是怎么回事(手机来电不显示来电屏幕)

  • qq操作过于频繁请稍后再试怎么办(qq操作过于频繁,不能评论)

    qq操作过于频繁请稍后再试怎么办(qq操作过于频繁,不能评论)

  • 抖音号一天可以关注多少人(抖音号一天可以私信多少人)

    抖音号一天可以关注多少人(抖音号一天可以私信多少人)

  • 拼多多退货单号在哪里上传(怎么重新填写拼多多退货单号)

    拼多多退货单号在哪里上传(怎么重新填写拼多多退货单号)

  • 苹果手机怎么滑动截图(苹果手机怎么滑屏)

    苹果手机怎么滑动截图(苹果手机怎么滑屏)

  • 西门子sf故障灯解决方法(西门子sf指示灯)

    西门子sf故障灯解决方法(西门子sf指示灯)

  • word怎么生成二维码(word文档生成二维码)

    word怎么生成二维码(word文档生成二维码)

  • 发朋友圈不折叠的方法(文字多了怎么发朋友圈不折叠)

    发朋友圈不折叠的方法(文字多了怎么发朋友圈不折叠)

  • vivo手机al键有什么用(vivoai键是哪个键)

    vivo手机al键有什么用(vivoai键是哪个键)

  • 为什么苹果手机相册加载不出来(为什么苹果手机信号不好 怎么解决)

    为什么苹果手机相册加载不出来(为什么苹果手机信号不好 怎么解决)

  • 解决Vue报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location(vue uncaught typeerror)

    解决Vue报错:Uncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location(vue uncaught typeerror)

  • 进入税金及附加怎么算
  • 企业所得税核定征收的条件
  • 报销为什么不能多家赔付
  • 加计抵减的税额多长时间
  • 公司筹建期间发生的费用怎么处理
  • 营改增后,建筑安装工程的费率是
  • 房地产企业土地使用税
  • 公司向股东无息借款要交哪些税
  • 未取得发票的收入怎么做账
  • 企业要怎样才能发挥其在实现生态产品价值过程中的作用
  • 年末转出未交增值税的视频
  • 汇算清缴前发票未到
  • 预付账款金额过大的原因
  • 汽车装饰装潢税率
  • 未取得正式发票怎么整改
  • 开专票一定要公章吗
  • 为什么增值税发票税率是1%
  • 主营业务收入包含消费税吗
  • 销售折扣和销售折让的账务处理
  • 工程价款是什么意思
  • 保险代理公司做什么
  • 付给企业的律师费用
  • 小规模纳税人别人开了专票怎样处理
  • 长期借款和短期借款时间
  • 销售商品发生的现金折扣
  • 已抵扣的发票怎么撤销
  • php加密解密函数高级
  • 任务栏变宽了怎么调回来win11
  • win10补丁kb5005543
  • 苹果a1530是什么
  • citespace关键词共现分析
  • 对公账户转入对私账户
  • 基于Selenium的自动化测试平台设计与实现
  • php中session使用
  • 法院判定支付对方诉讼费,我可以入账吗
  • 数字图像处理总结
  • gp_dump命令
  • 省外的发票能入账吗
  • 2022年最新公务员职务职级对照表
  • 人力资源管理公务员岗位
  • 上月购进固定资产次月退货已开具红字发票如何入账
  • 销售折让的会计科目
  • db2入门视频教程
  • mysql乱码产生原因
  • mongodb添加环境变量
  • 自查补税行为有哪些方面
  • 成本费用率和成本费用利润率的区别
  • 权益法下公允价值变动计入其他综合收益
  • 暂估入库结转成本后如何冲红
  • 去银行提取备用金不是会计本人需要给谁打电话
  • 低值易耗品摊销怎么做账
  • 变更法人流程和资料
  • 加工废料如何处理
  • 费用类科目的明细怎么写
  • 审计备案表
  • 资产负债表怎么看财务状况
  • sql分页查询怎么实现
  • redhat配置bond
  • 怎么操作win10系统
  • ubuntu注册用户
  • imac固态
  • win8.1开始界面
  • win 7组策略
  • win7安装远程桌面组件
  • 时间服务器ip 端口
  • win8的ie浏览器
  • ie8-ie11浏览器
  • rhel6.5安装
  • epipe错误
  • python3.7内置模块
  • python列表讲解
  • python的argparse用法
  • node.js 10实战
  • unity移动脚本代码
  • 什么叫开源库
  • qq个人资料显示王者战绩
  • jquery选择器写法
  • 青海国税发票查询系统
  • 税务非正常户转正常户的申请报告
  • 福建地税网上办事大厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设