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

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

碰撞检测的初始想法

我们小组中本来的想法是,在所有类之外定义一个专门的碰撞检测函数,如图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
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个拳游戏,可以使用VB.NET编程语言来完成。 首先,需要设计游戏的界面。可以使用Windows窗体应用程序来创建游戏的主界面,并添加各种控件,如按钮、图像等,以展示游戏的战斗场景、角色和操作界面。 其次,需要定义游戏角色的属性和行为。可以通过创建类来表示不同的游戏角色,如玩家角色和电脑角色。需要定义角色的基本属性,如生命值、攻击力、防御力等,以及角色的行为,如攻击、防御、必杀技等。 然后,需要实现游戏的逻辑。可以使用VB.NET编写游戏的逻辑代码,包括玩家和电脑角色的战斗逻辑、生命值的变化、技能的释放等。可以使用条件语句、循环语句和函数等来实现游戏的各种逻辑。 此外,还可以考虑增加游戏的特效和音效。可以使用VB.NET提供的绘图和声音功能,为游戏添加精美的特效和音效,以提升游戏的体验。 最后,需要测试和完善游戏。在开发过程,需要进行不断的测试和调试,确保游戏的各项功能和逻辑都能正常运行。如果发现问题或需要改进的地方,可以及时进行修改和优化,直到游戏达到预期效果。 总结起来,通过使用VB.NET编程语言,可以实现游戏的界面设计、角色属性和行为的定义、游戏逻辑的实现、特效和音效的添加等。为了更好地完成游戏开发,可以参考其他类似游戏的设计和实现,学习和借鉴其经验和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值