当前课程知识点:Python 交互式程序设计导论 > 第8周 > B、课程视屏(动画) > 精灵碰撞
返回《Python 交互式程序设计导论》慕课在线视频课程列表
欢迎大家回到python课堂
今天,我将给大家介绍我们第八个小项目
守卫家园当中的——精灵碰撞
首先,我们来看一看什么是精灵碰撞
精灵碰撞是怎么一回事
为了使碰撞检测变得简单,我们假设,我们在项目当中
看到的每个事物或者每个对象,都是一个圆
因为对于圆来说,检测碰撞会变得简单
但又不会使我们的游戏失去可玩儿性
假设这里有两个事物
第一个事物半径为r1,第二个事物半径是r2
两个圆之间,有一个圆心距,我们称之为d
我们去比较d和两个圆半径之和
当d大于r1加r2(d>r1+r2)
很显然两个事物或者对象没有发生碰撞
当两个对象,圆心距(d)小于r1加r2(d 也就是小于半径之和,很显然,它们是发生了碰撞 因为使用圆去检测碰撞,就会变得更加简单 圆心距这个是我们初高中数学已经有的知识 计算起来非常的简单 在第八个小项目当中,我们提供的模板 那么精灵类,在这里面有两个属性 首先是pos这个属性,也就是它的中心坐标 还有一个属性是radius也就是我们这个精灵的半径 有了中心坐标和半径,我们就可以去计算和其它对象之间的圆心距 在精灵类当中还提供了这样几个方法 首先是获取半径,通过get_radius()很容易就得到当前精灵的半径 通过get_pos(),pos就可以获得当前精灵的中心坐标 那么第三个方法,检测碰撞collide(),那么这个方法在我们 精灵类这个视频当中 已经有讲解,我在这里就不过多阐述 它可以检测两个对象之间是否发生碰撞 在我们本周的项目当中,我们来看一下,在这个游戏中 我们有哪几类对象 首先,是我们的城堡,我们的城堡有一个中心,它有一个半径 其次,是我们的敌人,我们的敌人也有一个中心,也有它自己的半径 第三类是我们战士射出去的剑,它有它的中心,也有它的半径 我们的战士不用去检测和敌人是否发生碰撞 所以,在我们的游戏当中,我们最主要要检测的是 城堡和敌人是否发生碰撞,战士射出去的剑,是否和敌人发生了碰撞 那么,在我们的游戏当中,我们有这四类对象:战士、城堡、箭和敌人 而我们城堡、箭和敌人,都是通过精灵类产生的 而我们的城堡游戏初始化 那么它是不止一个城堡,是具有四个城堡 而战士射出去的剑,是根据我们玩家鼠标点击的次数决定的 游戏中的敌人是随机产生的,所以它们都不只有一个 为了检测方便,我们都用集合去表示 我们会有一个城堡集合,有一个战士射出去的剑这样一个集合 有产生的敌人这样一个集合 我们的任务就是检测城堡这个集合和敌人这个集合之间碰撞的关系 再去检测战士射出去的剑与敌人之间这两个集合之间的碰撞关系 在我们的模板当中,提供的精灵类已经可以检测两个单独对象之间的碰撞 那怎么样去检测两个集合之间的碰撞呢 我们的模板首先提供了一个检测一组对象和另一个对象是否 发生碰撞的辅助函数 定义为group_colide,在这里提供了两个参数 第一个是一个组的参数group,第二个是一个对象other_object这个参数 我们的任务是检测group这个组中的每个对象 是否和我们后面传进的这个other_object发生了碰撞 如果发生了碰撞,那么我们就返回True,否则我们返回False 如果是Ture我们可能会执行相应的操作 例如,会有动画效果的展示 当我完成了一组对象和另一个对象的碰撞检测后 还不能够完成,城堡这个集合和敌人这个集合的碰撞检测 也无法完成战士射出去的剑这个集合和敌人这个集合之间的碰撞 我们还需要我们模板提供的另一个辅助函数 检测两组对象是否发生碰撞 那么在这里,我们只需要检测group2中每个对象 是否和group1中每个对象发生了碰撞 因为我们游戏的设置是,如果我们的消灭敌人数超过100 或者我们的城堡全部被破坏,或者逃逸的敌人超过10个 我们的游戏就发生结束,所以这时候我们检测碰撞 如果是真,我们将返回被消灭的敌人数或者是损失的城堡数量 那么这就是我们检测碰撞所要用到的三个方法或者说是函数 那么第一个检测单个对象是否发生碰撞 我们可以直接使用精灵类的一个碰撞检测方法 当我要检测两个集合之间是否发生碰撞 首先我先要利用检测一组对象和另一个对象是否发生碰撞 再使用检测两组对象是否发生碰撞,这样两个辅助函数 最终才能够完成我们一组对象和另一组对象之间的碰撞 希望大家理清自己的思路 将这三个碰撞检测合理的运用到自己的代码当中 相信大家一定能够完成本周的项目 好,今天的内容就到这,谢谢大家的收看
-课程简介
--课程简介
-A 课程视频(算数操作符及表达式)
--绪论
-B 课程视频(变量及赋值)
--变量
--项目提交
-C 辅助视频(计算机结构、Python开发环境安装)
-D 辅助视频(如何提交项目)
--项目提交
-第0周--小测验
-本周项目:"我喜欢Python"
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
--项目提交
-A 课程视频(函数)
--函数
--其它操作符
--随机函数
-B 课程视频(逻辑及表达式)
--逻辑值和比较
--条件
--编程技巧
-第1周--小测验
-本周项目:“老虎杠子鸡虫”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(Python交互式应用)
--事件驱动编程
--按钮
-B 课程视频(输入框、全局变量)
--输入框
--编程技巧
-第2周--小测验A
-第2周--小测验B
-本周项目:猫咪藏在哪个房间
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(画布绘图)
--画布和图形绘制
--字符串处理
--图片和音效
-B 课程视频(计时器)
--计时器
--交互式绘图
--“神奇时钟”游戏
--编程技巧
-第3周--小测验A
-第3周--小测验B
-本周项目:“神奇时钟”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(列表)
--列表
--键盘输入
--碰撞和反射
-B 课程视频(键盘控制)
--速度控制
--运动
--编程技巧
--“桌上冰球”游戏
-第4周--小测验A
-第4周--小测验B
-本周项目:“桌上冰球”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(鼠标输入、列表进阶)
--鼠标输入
--Video
--Video
--Video
-B 课程视频(字典和图片)
--Video
--Video
--Video
--Video
-第5周--小测验A
-第5周--小测验B
-本周项目:“世界杯八强连连看”
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类)
--华容道中的类
-B 课程视频(平铺图片)
--平铺图片
--理解对象
--编程技巧
--“华容道”游戏
-第6周--小测验A
-第6周--小测验B
-本周项目:“华容道”游戏
--游戏说明
--程序说明
--编码步骤
--评分标准
--项目模板
-A 课程视频(类进阶及文件操作)
--集合
--文件操作
--文字块类
--处理停止的文字块
-B 课程视频(游戏状态控制)
--游戏记分规则
--编程技巧
-第7周--小测验A
-第7周--小测验B
-本周项目:决战三字经
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板
-A、课程视屏(精灵集合)
--Video
--精灵类
--战士类
--编程技巧
-B、课程视屏(动画)
--精灵碰撞
--精灵动画
--编程技巧
--保卫家园游戏
-第8周--小测验
-本周项目:守卫家园
--游戏说明
--程序说明
--编程步骤
--评分标准
--项目模板