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

  • procreate怎么移动画的部分(procreate怎么移动图层)

    procreate怎么移动画的部分(procreate怎么移动图层)

  • 华为手机拉黑后会收到短信吗(华为手机拉黑后不想看到对方短信,怎么办?)

    华为手机拉黑后会收到短信吗(华为手机拉黑后不想看到对方短信,怎么办?)

  • 京东精选和京东超市有什么区别(京东精选和京东自营有什么区别?)

    京东精选和京东超市有什么区别(京东精选和京东自营有什么区别?)

  • 陌陌动态别人看不到怎么回事(陌陌动态别人看不到)

    陌陌动态别人看不到怎么回事(陌陌动态别人看不到)

  • ipad黑屏但是有声音(ipad黑屏但是有亮光)

    ipad黑屏但是有声音(ipad黑屏但是有亮光)

  • 局域网外什么意思(什么是局域网和外网)

    局域网外什么意思(什么是局域网和外网)

  • 抖音为什么看不到别人的在线状态(抖音为什么看不到别人的作品)

    抖音为什么看不到别人的在线状态(抖音为什么看不到别人的作品)

  • 华为手机微信不见了怎么找出来(华为手机微信不显示未读消息数量)

    华为手机微信不见了怎么找出来(华为手机微信不显示未读消息数量)

  • 抖音点赞对方知道是谁吗(抖音点赞对方知道位置吗)

    抖音点赞对方知道是谁吗(抖音点赞对方知道位置吗)

  • 苹果手机拍照hdr是什么意思(苹果手机拍照HDR怎么调)

    苹果手机拍照hdr是什么意思(苹果手机拍照HDR怎么调)

  • p30pro红外传感器有什么用(华为p30 pro红外传感器是干什么的)

    p30pro红外传感器有什么用(华为p30 pro红外传感器是干什么的)

  • ps里图层被锁怎么解锁(ps图层被锁了)

    ps里图层被锁怎么解锁(ps图层被锁了)

  • 华为更换灭屏样式(华为灭屏显示怎么更换)

    华为更换灭屏样式(华为灭屏显示怎么更换)

  • 为什么airpods设置不了(airpods为什么不在设置里显示)

    为什么airpods设置不了(airpods为什么不在设置里显示)

  • 为什么运动世界校园定位不了(为什么运动世界校园跑步了没有记录)

    为什么运动世界校园定位不了(为什么运动世界校园跑步了没有记录)

  • ios13能用动态壁纸吗(ios13.4怎么设置动态壁纸)

    ios13能用动态壁纸吗(ios13.4怎么设置动态壁纸)

  • vivo5g手机什么时候上市(2020年vivo5g手机)

    vivo5g手机什么时候上市(2020年vivo5g手机)

  • oppo带nfc功能的手机(oppo带nfc功能的5g手机有哪些)

    oppo带nfc功能的手机(oppo带nfc功能的5g手机有哪些)

  • 小米钱包安装别的手机(钱包原小米钱包)

    小米钱包安装别的手机(钱包原小米钱包)

  • 如何下载视频到本地(如何下载视频到电脑上)

    如何下载视频到本地(如何下载视频到电脑上)

  • 快手小店店铺保证金是多少(快手小店店铺保证金怎么退)

    快手小店店铺保证金是多少(快手小店店铺保证金怎么退)

  • 苹果手机的便签在哪里(苹果手机的便签突然不见了在哪里找)

    苹果手机的便签在哪里(苹果手机的便签突然不见了在哪里找)

  • 如何把图片制作视频(如何把图片制作成动图)

    如何把图片制作视频(如何把图片制作成动图)

  • 魔改并封装 YoloV5 Version7 的 detect.py 成 API接口以供 python 程序使用(魔改toolbox)

    魔改并封装 YoloV5 Version7 的 detect.py 成 API接口以供 python 程序使用(魔改toolbox)

  • js原型模式是什么(js原型模式创建对象的优缺点)

    js原型模式是什么(js原型模式创建对象的优缺点)

  • 免税合并和应税合并商誉
  • 企业所得税应纳税所得额怎么算
  • 扶贫入股分红能领多久
  • 建筑企业印花税的计税依据
  • 建筑安装增值税纳税地点
  • 购买土地自建厂房,土地怎样摊销
  • 资产负债表第二季度年初余额怎么填
  • 申报个税人员金额一般
  • 所得税多交怎么调整
  • 一般纳税人销项税和进项税如何抵扣
  • 资产负债表项目的编制方法
  • 去新成立的公司
  • 高温费计税吗
  • 怎么登记明细账
  • 定额备用金补付会计分录怎么写?
  • 采购部付款申请单和财务付款流程
  • 已结转的凭证可以取消结转吗
  • 免税的农业企业可以抵扣专票吗
  • 增值税发票做假什么后果
  • 出售商标使用权收入计入什么科目
  • 增值税开票流程图解
  • 福利费税前扣除标准2023
  • 增值税专用发票使用规定 最新
  • 专票红冲分录
  • 公司出差打的报销吗
  • 债券借贷业务属于表外业务吗
  • 残保金次年申报
  • 清算财产分配会计分录
  • 差额纳税和全额纳税
  • 减免税款未抵扣增值税
  • 生产车间的窗帘怎么处理
  • 苹果手机无法加入WiFi
  • 修改hosts文件的软件
  • php过滤数组中的空字符串
  • 如何用腾讯电脑管家回复格式化U盘
  • 长期投资损失的确认
  • h5移动端上传pdf
  • php-cpp
  • 网站国际化方案
  • 汇总开具的运输发票
  • 会计中持有至到期投资是什么意思
  • btrfs 读取
  • 命令启动服务管理
  • 以前年度损益调整账务处理分录
  • 微信转账要如何退回去
  • 去年亏损今年盈利
  • 营改增分录
  • 公司项目支付的钱叫什么
  • 单位代扣公积金是什么意思
  • 小规模增值税减按1%的政策
  • 受托代销商品的手续费计入什么科目
  • 职工薪酬包括哪些应如何计算
  • 事业单位劳务派遣工能长期干下去吗
  • 债务重组与资产重组
  • 临时工工资无发票个税怎么申报
  • 企业缴纳车船税吗
  • 递延所得税资产怎么计算
  • 异地工程可以在公司所在地缴纳税款吗
  • 当月增加的固定资产当月不计提折旧
  • 公益性捐赠要确认递延吗
  • 高新技术企业的税收优惠政策
  • 中小企业做账
  • mysql在本地主机创建用户账号
  • centos6.8安装不上
  • windows7字体安装方法
  • win7链接联机id
  • win8停止服务
  • centos源码安装软件
  • 个人pc用户免费下载软件
  • cocos2dx4.0入门
  • java dao框架
  • opengl画简单图形
  • bootstrap怎么用
  • node js 前端
  • jquery切换css样式
  • Android使用的方式来管理
  • jquery获取元素父级body高度
  • Android应用程序可以直接在ios中安装运行吗
  • 是否开具发票就要确认企业所得税收入?
  • 河南省个人无犯罪证明书
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设