拳皇中碰撞检测和血量变化的实现

碰撞检测的初始想法

我们小组中本来的想法是,在所有类之外定义一个专门的碰撞检测函数,如图command()函数一样。根据两个人物角色的位置x,y和img_x图片的宽度,因为x,y和img_x都是实时更新的,所有可以进行图片是否碰撞的检测。

并不是说不能这样写,知识后面在写人物技能的时候,我们发现不同的技能有不同的机制,独立在所有类之外还要要求能识别不同人物的不同技能,这样实现起来非常复杂。

后面,我们选择在每一个role子类中的每一个能产生伤害的技能独立进行伤害判断,而因为人物左右朝向的不同,需要进行不同的判断。

碰撞检测的部分改进

在碰撞检测这一部分,我们要实现的是,另一人物的扣血和“被打”画面显示。

在刚开始进行实现时,我们是将“被打”这一画面只是当做了一个动作,后面察觉到这样实现存在着一些谬误,“被打”画面播放存在问题。

后面进行了改进,将“被打”视为了一种状态,p1实现攻击时,p2正处于“被打”状态进行画面播放。

碰撞检测的代码

代码样例(左右两侧不同):

碰撞检测的实现思路

拳皇游戏主要通过在窗口界面中连续贴图,以实现人物的动态效果。当P1、P2两个人物进入游戏中,由于二者的贴图相对位置,会产生碰撞检测的问题。此外,如何判断攻击和技能是否命中,也需要进行碰撞检测。特别的,碰撞并不代表有效命中,即不代表扣血。判定受到攻击的人物是否扣血,还要判定受到攻击的人物是否处于防御状态,而对于地波攻击,还要判定受到攻击的人物是否在特定的时间跳跃。

碰撞检测主要用于人物相对位置检测,以及作为拳击、腿击、技能是否命中的充分条件。下面是以P1为例的实现思路。

对于人物相对位置的碰撞检测。在人物处于跳跃状态时要进行碰撞检测,需要判定P1是否跳跃,同时判定P1贴图的x坐标是否大于P2贴图的x坐标,并且还要判定P1贴图的y坐标加上P1跳跃图片的长度是否小于P2贴图的y坐标。即P1->x > P2->x &&
P1->y + img_y < P2->y?才能决定是否发生了两个人物的相对位置交换。在人物处于移动状态时(即没有人物处于跳跃状态时)也要进行碰撞检测,设置判定条件P1->x + img_x < P2->x ?以避免两个人物贴图重合。

对于拳击的碰撞检测,需要判定P1的拳击贴图的x坐标加上P1的拳击贴图对应图片的宽度,是否大于P2贴图的x坐标。即判定P1->x+ img_x(拳击图片的宽度)> P2->x ?

对于腿击的碰撞检测,需要判定P1的腿击贴图的x坐标加上P1的腿击贴图对应图片的宽度,是否大于P2当前贴图的x坐标。即判定P1->x+ img_x(腿击图片的宽度)> P2->x ?

对于技能的碰撞检测,需要判定P1的“技能特效”贴图的x坐标加上P1的“技能特效”贴图对应图片的宽度,是否大于P2当前贴图的x坐标。即判定skill_x(技能特效的x坐标) + skill_img_x(技能特效的宽度) > P2->x ?

特别的,拳击、腿击、技能的碰撞检测判定之后,还需判定是否为有效的命中,并且置P2为承伤状态,以进行P2血量的扣除。同时更改标志变量的内容,以保证一次有效的命中只扣除一次血量。判定是否为有效命中,通过判定P2是否处于防御状态来实现,而对于地波攻击,还要追加判定P2是否处于跳跃状态。

血量变化的实现思路

在碰撞检测中,若是进行了扣血,实际上只是对role类中的blood变量进行了减少。

而对于实际上需要的贴图场景变换,是置于独立的draw_fight()函数中的,对于满值为100的blood,记录其变化值,根据变化值来进行相应的贴图变换。

p->point存储的值为人物血量的一个非常小的平行四边形的四个点,后续血量变换只需要改变相应的点使平行四边形增大即可。

血量变化的代码

拳皇中碰撞检测和血量变化的实现相关推荐

  1. 【Unity】一个使用Dorween实现的血量条显示与血量变化

    学习的时候负责写了关于怪物血量以及其血条显示的脚本,先上代码. 游戏内血量条的制作 1.先展示一下具体是怎么写的 两个Image文件拉成长方形条,并将该组合制作为预制体. 在Source Image中 ...

  2. U3D游戏角色血条制作并显示血量变化

    U3D游戏角色血条制作并显示血量变化 关键:利用Slider来制作血条 大概效果: 数字会随着血量变化而变化. 步骤 1.在层级面板中右击,选择UI中的Slider. 2.创建好后,将Slider命名 ...

  3. 教你如何查看 Git 提交中发生了什么变化

    Git 提供了几种方式可以帮你快速查看提交中哪些文件被改变. 如果你每天使用 Git,应该会提交不少改动.如果你每天和其他人在一个项目中使用 Git,假设 每个人 每天的提交都是安全的,你会意识到 G ...

  4. 《HTML5移动应用开发入门经典》—— 2.4 HTML5中的HTML语法变化

    本节书摘来异步社区<HTML5移动应用开发入门经典>一书中的第2章,第2.4节,作者:[美]Jennifer Kyrnin,更多章节内容可以访问云栖社区"异步社区"公众 ...

  5. Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(

    2019独角兽企业重金招聘Python工程师标准>>> 在Java ME游戏开发中,碰撞检测算法在Java?ME中的实现(百搜技术) 在Java ME游戏开发中,经常需要进行碰撞检测 ...

  6. vue 监听表格里的数据变化_vue中监听数据变化 watch

    今天做项目的时候,子组件中数据(原本固定的数据)需要父组件动态传入,如果一开始初始化用到的数据.但当时还没有获取到,初始化结束就不会更新数据了.只有监听这两个属性,再重新执行初始化. 1.watch是 ...

  7. oracle dba角色_DBA在“即服务”世界中角色的不断变化

    oracle dba角色 在过去的十年中,现代企业中管理和运行数据库的需求和要求有了巨大的发展. 负责运行企业数据库的数据库管理员(DBA)的注意力正在发生普遍的转移:不是确保访问和可用性,而是要求他 ...

  8. 在Android中处理屏幕布局变化

    说明 以编程方式处理屏幕布局,锁定屏幕布局.控制活动生命周期,本文简明讲述以编程方式管理屏幕布局,每个小节都聚焦于这个主题的不同方面. 手动处理布局变化 首个显要的讨论点是如何手动处理布局变化. 一个 ...

  9. 一元线性回归中loss值的变化分析

    1 致谢 感谢陈助教的帮助和解答! 2 前言 线性回归是我们在机器学习算法中学习到的第一个回归算法,所以我们一定要学习并且掌握清楚,为后续的学习奠定良好的基础. 3 问题描述 这几天在做一元线性回归的 ...

  10. 实现随着 下拉菜单中 选中值的变化 周边的值也也跟着变化。(使用【 VLOOKUP 】 函数)

    前言: 我们要实现如下功能. 部门     姓名    职务 ------------------------------ 实现如下功能 其中,姓名是一个下列菜单. 选中姓名时,部门和职务也跟着变化. ...

最新文章

  1. 史诗级画面刷爆全球,尼奥重返矩阵,为崔妮蒂而战!《黑客帝国4》重磅来袭!...
  2. 云安全趋势:IaaS?谢了,我要 PaaS
  3. jdbc mysql 函数 慢_java jdbc addBatch()提交mysql速度过慢
  4. VB的一些项目中常用的通用方法-一般用于验证类
  5. Java多线程之Synchronized和Lock的区别
  6. React开发(183):ant design 中treeSelect控制选中
  7. 使用命令行开始你的netcore之路
  8. svn 导入的 web项目怎么变成了java项目了
  9. eclipse安装svn服务器
  10. Python如何使用生成器得到斐波那契数列
  11. 数仓系列 | Flink 窗口的应用与实现
  12. 致敬Github那些卓越贡献的大佬和他们的公众号
  13. 0框架前端-如何写垂侧边栏(Vertical Tabs)
  14. 基于Pytorch对凸函数采用SGD算法优化实例(附源码)
  15. ExpandableListView
  16. h2ouve下载 insyde_H20UVE_100.00.9.2 Insyde H2OUVE (UEFI Variable Editor) - 下载 - 搜珍网
  17. n9005zhuenb6 Android 5,三星Galaxy Note3(港版N9005)刷机与ROOT教程【详细介绍】
  18. 联想服务器CPU系列,联想推出采用第三代英特尔至强处理器的ThinkSystem SR860 V2服务器...
  19. 广州 人才引进,家属随迁(有小孩),自己房产,外省户口,复核所需资料
  20. [BZOJ3837][Pa2013][随机][乱搞]Filary

热门文章

  1. 64qam带宽计算_烧脑:5G 理论峰值速率是怎么计算的?
  2. Internet连接共享只能上qq不能打开网页的问题解决
  3. 反欺诈概念库-物联卡/物联网卡/流量卡
  4. 服务器代码review要点
  5. 用户流失、股价重挫的Netflix究竟发生了什么?
  6. 山东大学人机交互技术复习纲要
  7. cahrt框架 ios_iOS-Charts介绍
  8. 黎曼的zeta函数(1)
  9. PHP最好的培训学校-兄弟连IT教育
  10. 3. 天线设计理论 - 什么是带宽