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

  • 米家摄像头怎么连接手机(米家摄像头怎么删除回放)

    米家摄像头怎么连接手机(米家摄像头怎么删除回放)

  • 平板悬浮球怎么打开(平板悬浮球怎么弄)

    平板悬浮球怎么打开(平板悬浮球怎么弄)

  • pefmoo是什么型号的手机(pefm00是什么型号的手机)

    pefmoo是什么型号的手机(pefm00是什么型号的手机)

  • 华为手机控制中心怎么调出来(华为手机控制中心怎么设置)

    华为手机控制中心怎么调出来(华为手机控制中心怎么设置)

  • 华为手机hd怎么关(华为手机hd怎么关闭nova5)

    华为手机hd怎么关(华为手机hd怎么关闭nova5)

  • 华为平板为什么不能横屏(华为平板为什么会自动关机)

    华为平板为什么不能横屏(华为平板为什么会自动关机)

  • mate30无线投屏电视没显示(mate30怎么无线投屏)

    mate30无线投屏电视没显示(mate30怎么无线投屏)

  • 三星s8黑屏,按了屏幕一个地方又会亮(三星s8黑屏怎么重启)

    三星s8黑屏,按了屏幕一个地方又会亮(三星s8黑屏怎么重启)

  • 抖音送礼记录为什么没了(2021抖音送礼记录为什么没了)

    抖音送礼记录为什么没了(2021抖音送礼记录为什么没了)

  • 戴森v11absolute和fluffy的区别(戴森v11 absolute和complete选哪个)

    戴森v11absolute和fluffy的区别(戴森v11 absolute和complete选哪个)

  • 华为手机怎么移动桌面图标(华为手机怎么移除黑名单的人)

    华为手机怎么移动桌面图标(华为手机怎么移除黑名单的人)

  • hp是什么打印机(惠普打印机都有什么型号)

    hp是什么打印机(惠普打印机都有什么型号)

  • 苹果x换屏后面容失效(苹果X换屏后面容还能用吗)

    苹果x换屏后面容失效(苹果X换屏后面容还能用吗)

  • 正数的原码补码反码相同吗(正数的原码补码反码)

    正数的原码补码反码相同吗(正数的原码补码反码)

  • 微信缓存的数据能删除吗(微信缓存的数据是什么)

    微信缓存的数据能删除吗(微信缓存的数据是什么)

  • 云计算的模式有哪些(云计算模式有公有云私有云混合云)

    云计算的模式有哪些(云计算模式有公有云私有云混合云)

  • 小米cc9e怎么设置快充(小米cc9egps怎么设置)

    小米cc9e怎么设置快充(小米cc9egps怎么设置)

  • 手机otg怎么传歌(手机OTG怎么传歌到mp3)

    手机otg怎么传歌(手机OTG怎么传歌到mp3)

  • wps幻灯片怎么合并(wps幻灯片合并形状)

    wps幻灯片怎么合并(wps幻灯片合并形状)

  • 手机上显示圆圈怎么去掉(手机上显示圆圈少一点是什么标志)

    手机上显示圆圈怎么去掉(手机上显示圆圈少一点是什么标志)

  • 华为荣耀7x是不是双卡(华为荣耀7x不能接打电话)

    华为荣耀7x是不是双卡(华为荣耀7x不能接打电话)

  • qq音乐铭牌怎么显示(qq音乐铭牌怎么抢到靓号名牌)

    qq音乐铭牌怎么显示(qq音乐铭牌怎么抢到靓号名牌)

  • vivox20怎样退出安全模式(vivox60如何退出)

    vivox20怎样退出安全模式(vivox60如何退出)

  • qq号码被冻怎么恢复(qq号被冻怎么办)

    qq号码被冻怎么恢复(qq号被冻怎么办)

  • 三星手机怎么补电(三星手机丢了怎么办)

    三星手机怎么补电(三星手机丢了怎么办)

  • 如何让img标签在父元素中自适应宽度或者高度,按比例显示(img标签怎么写)

    如何让img标签在父元素中自适应宽度或者高度,按比例显示(img标签怎么写)

  • 差额征税如何开票备注内容应该怎么调
  • 含税销售额换算成不含税销售额的公式是什么?
  • 购买厂房需要交土地使用税吗
  • 分支机构设立当年是否需要就地预缴企业所得税?
  • 购入包装物计入
  • 施工单位的产值报告模板
  • 收到预付款的发票怎么写摘要
  • 法人转入公司的资金怎么做账
  • 个人缴纳印花税减半吗?
  • 税费返还如何处理
  • 公司购买的二手车如何计提折旧
  • 工程在建期间的会计分录
  • 行业协会的作用定位
  • 多扣了离职人员的钱
  • 印花税,车船税通过应交税金科目吗
  • 纯外贸企业进项要转出吗为啥
  • 税控盘抵税申报表如何撤销
  • 营改增后二手房转让 一般计税 可以差额
  • 增值税进项大于销项月末需要结转吗
  • 企业筹建期间开办费计入什么科目计入借方还是贷方
  • 支付境外咨询费代扣代缴增值税
  • 对外开具发票
  • 抵扣进项税有期限吗
  • 是否跨期
  • 公司买的油烟机可以抵扣进项税吗
  • 如何查询公司有没有报个税
  • 资产负债表的资产总额怎么看
  • win7系统咋样
  • win10新装系统我的电脑在哪
  • 购买股票的会计分录
  • 最贵的耳机排名
  • 技术转让费会计处理
  • 商业银行提取的贷款损失准备金
  • 橡皮树的养殖方法视频教程
  • framework 4 client profile
  • 专项应付款转资本公积需要什么附件
  • 清洁费用是属于什么科目
  • 约克大教堂是基督教吗
  • uncompressing
  • MYSQL ERROR 1045 (28000): Access denied for user (using password: YES)问题的解决
  • sql语句修改某个字段
  • php mysql教程
  • 应收账款和应付账款可以对冲吗
  • 可供出售金融资产属于什么科目
  • 工会经费和福利费绩效目标怎么写
  • 出租房屋会计账务处理
  • 出口收汇手续费需要在出口退税时扣除吗
  • 财务收入支出明细表
  • 本月购进金额怎么算
  • 无票收入怎么写分录
  • 自产产品与视同自产产品
  • 同比增长怎么算出来的
  • 应收账款怎么记录
  • 建账的要点及应注意的问题
  • sql server多行添加
  • centos yun
  • mybatis报错invalid bound statement
  • esxi6.7克隆
  • Ubuntu 14.04/14.10如何安装记账软件HomeBank?
  • window msconfig
  • ubuntu命令行添加用户
  • Linux下使用quota命令管理磁盘空间的实例教程
  • mac照片内存清理
  • nodejs 获取文件名
  • jQuery中的ajax async同步和异步详解
  • 使用jquery的步骤
  • unity打包package
  • linux perl -e
  • 深入理解中国式现代化
  • [置顶]bilinovel
  • jquery 图片插件
  • jquery ztree选中节点颜色
  • unity 内嵌浏览器
  • java script语言
  • 怎么查询开票信息呢
  • 视频号带货个人和个体工商户的区别
  • 互城通怎么用微信充值
  • 国家税务总局办税指南
  • 百旺税控盘怎么备份数据
  • 保险赔款是免征还是不征?
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设