一种碰撞检测方法及装置与流程

文档序号:14188557阅读:298来源:国知局

本发明涉及电子技术,尤其涉及一种碰撞检测方法及装置。



背景技术:

格斗游戏(fighttechnologygame,ftg),是动作游戏的一种,这类的游戏具有明显的动作游戏特征,也是动作游戏中的重要分支。画面通常是玩家分为多个两个或多个阵营相互作战,使用格斗技巧使击败对手来获取胜利。这类游戏通常会被强烈要求的精巧的人物与招式设定,以达到公平竞争的原则,对打过程(格斗过程)是格斗游戏中的重要组成部分。

目前在二维(2d)的格斗游戏中,碰撞检测是游戏程序在运行过程中的重要判断过程,其中格斗游戏在两个或多个对象在格斗过程中,需要判断某个对象的攻击动作是否击中对方,这个判断过程就是碰撞检测。由于人物的轮廓并不是规则的图形,所以碰撞检测大部分都采用两种方法:

1)骨骼动画+物理引擎的方法,目前游戏所采用的动画系统可以分为两种:一种是骨骼动画系统,另一种是模型动画系统(序列帧动画系统);骨骼动画+物理引擎的方法仅适用于骨骼动画系统。物理引擎通过为刚性物体赋予真实的物理属性的方式来计算它们的运动、旋转和碰撞反映;并为每个游戏使用物理引擎并不是完全必要的“牛顿”物理(比如加速和减速),这在一定程度上可以通过编程或编写脚本来实现;然而,当游戏需要比较复杂的物体碰撞、滚动、滑动或者弹跳的时候(比如赛车类游戏或者保龄球游戏),通过编程的方法就比较困难了。由此可见,即使能够实现复杂的物体碰撞,骨骼动画+物理引擎这种方法消耗的性能很大,在低端手机上多对象进行格斗的时候,往往会因为性能的开销造成卡顿;而且有很多游戏的需求就是要用序列帧动画,而不是骨骼动画,所以这个方案就有一定的局限性。

2)关键部位挂载规则图形的方法,是指在对象如人物的关键部位(手脚、头、腰等)挂载一个比较小用于碰撞检测的规则图形(矩形或者圆形);当进行碰撞检测时,主要检测挂载的规则图形是否有重叠,如果挂载的规则图形有重叠时,则判断为碰撞检测发生,否则,则判断碰撞检测没有发生。这个方案容易实现,计算规则也比较简单,但是有两个缺点:第一是每个对象都需要挂载好几个图形,由于对象动作帧是不规则图形,这些工作都只能是手动挂载的;对于对象较多的情况下,挂载的工作量就比较大,而且后期对象修改的时候这些挂载的图形也需要手动重新挂载。第二是挂载图形的方法没办法保证碰撞检测绝对的准确,有一些没挂载到规则图形的地方有可能会成为漏网之鱼,从而导致精确度不够高。



技术实现要素:

有鉴于此,本发明实施例为解决现有技术中存在的至少一个问题而提供一种碰撞检测方法及装置,通过扫描对象的轮廓点,从而能够保证碰撞检测准确率。

本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供一种碰撞检测方法,所述方法包括:

判断当前帧中的对象是否发生攻击动作;

如果所述当前帧中的对象发生攻击动作,确定所述攻击动作所关联的至少两个对象的标识信息;

根据所述至少两个对象的标识信息从预设的关联信息确定所述至少两个对象的轮廓点的位置信息;

确定所述至少两个对象分别在当前场景中的位置信息;

根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果;

将所述判断结果确定为所述攻击动作的攻击结果。

第二方面,本发明实施例提供一种碰撞检测装置,所述装置包括第一判断单元、第一确定单元、第二确定单元、第三确定单元、第二判断单元和第四确定单元,其中:

所述第一判断单元,用于判断当前帧中的对象是否发生攻击动作;

所述第一确定单元,用于如果所述当前帧中的对象发生攻击动作,确定所述攻击动作所关联的至少两个对象的标识信息;

所述第二确定单元,用于根据所述至少两个对象的标识信息从预设的关联信息确定所述至少两个对象的轮廓点的位置信息;

所述第三确定单元,用于确定所述至少两个对象分别在当前场景中的位置信息;

所述第二判断单元,用于根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果;

所述第四确定单元,用于将所述判断结果确定为所述攻击动作的攻击结果。

本发明实施例提供一种碰撞检测方法及装置,其中判断当前帧中的对象是否发生攻击动作;如果所述当前帧中的对象发生攻击动作,确定所述攻击动作所关联的至少两个对象的标识信息;根据所述至少两个对象的标识信息从预设的关联信息确定所述至少两个对象的轮廓点的位置信息;确定所述至少两个对象分别在当前场景中的位置信息;根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果;将所述判断结果确定为所述攻击动作的攻击结果,如此,通过过扫描对象的轮廓点,从而能够保证碰撞检测准确率。

附图说明

图1为本发明实施例中原始帧的示意图;

图2为本发明实施例碰撞检测方法的实现流程示意图;

图3为本发明实施例当前帧与原始帧的关系示意图;

图4为本发明实施例中对象在场景中的位置信息示意图;

图5为本发明实施例中轮廓图的示意图;

图6为本发明实施例预处理流程的实现流程示意图;

图7为本发明实施例判断轮廓点流程的实现流程示意图;

图8为本发明实施例格斗中碰撞检测流程的实现流程示意图;

图9为本发明实施例碰撞检测装置的组成结构示意图。

具体实施方式

在本发明实施例中,在格斗游戏中需要判断两个人物格斗过程中是否击中对方,如果仅仅判断人物图像是否相交重叠是不行的,因为图像是矩形的,人物只是占据图像中的一部分而且人物是不规则的形状,人物的四周的大部分的透明像素,这些透明像素是不能参与碰撞检测,不然的话就会触发两个人物碰撞的逻辑,但是实际上用户看起来两个人物并没有接触,于是需要排除掉周围的透明像素来做碰撞检测。

其中碰撞检测是指:格斗游戏中的两个或多个对象在格斗过程中,需要判断某个对象的攻击动作是否击中对方,这个判断过程就是碰撞检测。透明像素是指原始的图像帧中除对象上的像素之外像素,一般来说,在原始的图像帧(游戏的原始帧)中除对象上的像素之外的像素是透明的,所以这些像素习惯上被称为透明像素;当然也可能是其他颜色的,一般来说,为了区别原始帧上对象区域和非对象区域,那么非对象区域的像素颜色与对象区域的像素颜色是不一样的,例如,非对象区域的像素颜色采用白色的,那么对象区域的像素颜色一般就不采用或者包括白色的,因为如果两者都采用白色的,那么将无法区别一个像素点是否属于对象,另外用户的感官上不能区别,从而造成用户体验不好。参见图1,图1中的a图是原始帧,游戏中的对象初始的时候都有这么一帧图像,原始帧在一定程度上能够表现游戏中对象的不同形态,图1中的a图为对象r在出拳和踢腿下的形态,对象r在该形态下每一个像素的位置信息和颜色信息会存储起来,例如对象r的像素点11、12、13、14除了存储位置信息外,还会存储像素点11、12的颜色信息为白色和像素点13、14的颜色信息为黑色;对于透明像素15和16来说,至少会存储位置信息,至于颜色信息可以设置为空或者一个特定的数值。为了方便理解,图1的b图为图1中a图中透明像素如果以像素块表示时的示意图,图1的b图的透明像素以灰白块表示,在实际存储时是透明的,图1的b图是为了帮助更好的理解像素这一概念。

下面结合附图和具体实施例对本发明的技术方案进一步详细阐述。

为了解决前述背景技术中存在的技术问题,本发明实施例提供一种碰撞检测方法,该方法应用于第一计算设备,该方法所实现的功能可以通过第一计算设备中的处理器调用程序代码来实现,当然程序代码可以保存在计算机存储介质中,可见,该第一计算设备至少包括处理器和存储介质。

图2为本发明实施例碰撞检测方法的实现流程示意图,如图2所示,该方法包括:

步骤s201,判断当前帧中的对象是否发生攻击动作;

这里,所述当前帧可以为某一场景中的图像帧,例如游戏场景中的图像帧,图3示出了当前帧与原始帧之间的关系,图3的a图示出了一个当前帧,该当前帧中包括两个对象20和30,图3的b图示出了对象20的原始帧,图3的c图示出了对象30的原始帧。图3的a图实际上是图3的b图和c图的合成帧。

这里,所述对象可以包括很多,以游戏场景为例,例如在人物格斗游戏中对象至少包括人物,当然除了人物还可能有植物、家具、动物之类的其他对象;对于其他的游戏,根据游戏的不同角色,游戏的对象也不同。

这里,所述第一计算设备在具体实施例的过程中可以为各种类型的具有信息处理能力的电子设备,例如所述电子设备可以包括手机、平板电脑、台式机、个人数字助理、导航仪、数字电话、视频电话、电视机等。

这里,所述攻击动作为能够活动的对象做出的具有攻击性的动作(具有一定破坏力的动作),例如在某款游戏中,人物是可以活动的,人走路是可以动的,但是不能将人走路这一动作视为攻击动作,只有满足一定条件的动作才能视为攻击动作,例如图1中的踢腿和出拳动作可以视为攻击动作。攻击动作除了人物的对打、格斗,也可以是具有攻击性的对象使用武器的攻击,例如某些对象扔炸弹等操作。

步骤s202,如果所述当前帧中的对象发生攻击动作,确定所述攻击动作所关联的至少两个对象的标识信息;

这里,所述攻击动作所关联的至少两个对象包括攻击动作所做出的对象(攻击动作所属的对象)和被攻击对象(或攻击对象),例如人物a要打人物b,那么攻击动作是人物a做出的,人物b是被攻击对象,人物a和人物b即为所述攻击动作所关联的至少两个对象。当然有时候不止两个对象,人物a要打人物b和c,攻击动作是人物a做出的,人物b和人物c是被攻击对象,人物a、b和c即为所述攻击动作所关联的至少两个对象。攻击动作所属的对象与被攻击对象的区别在于,攻击动作所属的对象是能够做出攻击动作的对象,而被攻击对象可以是能够做出攻击动作的对象也可以不是,例如在某款游戏的角色设置中植物是不能有攻击性的,那么植物不能成为攻击动作所属的对象,但是植物可以作为被攻击对象。

步骤s203,根据所述至少两个对象的标识信息从预设的关联信息确定所述至少两个对象的轮廓点的位置信息;

这里,所述方法还包括:初始化后,加载关联信息到内存中;

这里,步骤s203中轮廓点的位置信息为对象在原始帧中轮廓点的位置信息,在实现的过程中,可以预先确定原始帧中轮廓点的位置信息,然后将原始帧中轮廓点的位置信息和对象的标识信息形成关联信息,该关联信息至少关联对象的标识信息和原始帧中轮廓点的位置信息;预先存储或确定原始帧中轮廓点的位置信息可以提高计算效率;当然在本发明的其他实施例中,还可以实施计算对象在原始帧中轮廓点的位置信息。参见图3的b图所示,对象20的轮廓点在b图的坐标系(x1,y1)中有坐标(位置信息),然后将对象20的轮廓点的位置信息和原始帧的标识信息形成关联信息。

步骤s204,确定所述至少两个对象分别在当前场景中的位置信息;

这里,除了原始帧的位置信息(坐标)外,对象在场景中还有位置信息,以二维场景为例,参见图4所示,对象20和对象30在游戏坐标系(x2,y2)中各有一个位置信息。

步骤s205,根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果;

步骤s206,将所述判断结果确定为所述攻击动作的攻击结果。

这里,以游戏场景为例,计算设备总会对攻击动作反馈一个结果,例如无论是否攻击成功都可能会提示用户,攻击成功了还有对方受伤,如果是武器攻击还会有战斗力的增加,游戏币的增加等等,这些都要依赖与攻击结果。如果判断结果表明所述攻击动作击中,则攻击结果为成功;如果所述判断结果表明攻击动作未击中,则攻击结果为失败。

本发明实施例中通过扫描对象的轮廓像素点(轮廓点),使用这些轮廓点进行碰撞检测,能够保证碰撞检测具有100%的准确率,另外,整个碰撞检测的轮廓像素点的提取工作可以编写程序实现自动完成的,能够大大节省开发成本。

在图2所示的实施中,步骤s202需要确定在当前帧确定是谁攻击谁,即格斗的两个或多个对象是谁的问题,本实施例将提供一种实现步骤s202中“确定所述攻击动作所关联的至少两个对象的标识信息”的方式,该方式包括:

步骤s2021,确定所述攻击动作的属性信息;

这里,所述攻击动作的属性信息包括攻击动作的标识信息、攻击动作所属对象的类别、攻击动作的级别、攻击动作的力量例如火力等。以人物20为例,人物20的出拳动作、踢腿动作和跳跃动作均为攻击动作且每一攻击动作都具有一个标识信息,其中,出拳动作的级别小于踢腿动作的级别,踢腿动作的级别小于跳跃动作的级别,级别越高的攻击动作,其攻击范围可以越大;出拳动作的力量小于踢腿动作的力量,踢腿动作的力量小于跳跃动作的力量,其中力量越大的攻击动作,其攻击范围可以越大。

步骤s2022,根据所述攻击动作的属性信息和所述攻击动作的初始位置确定所述攻击动作的攻击范围;

步骤s2023,将在所述攻击范围内中的对象确定为所述攻击动作的攻击对象;

步骤s2024,将所述攻击动作的所属对象的标识信息和所述攻击对象的标识信息确定为所述攻击动作所关联的至少两个对象的标识信息。

这里,攻击动作的初始位置是已知的,即攻击部位在当前帧的位置信息(绝对坐标),在实现的过程中,可以根据攻击动作的属性信息查询预设的列表,得到攻击半径和角度,然后根据攻击半径和角度和攻击动作的初始位置确定攻击范围,其中例如炸弹的攻击范围可以是个圆,那么炸弹这个攻击动作的角度为360度,攻击半径不为0,则炸弹的攻击范围是一个以攻击初始位置为原点的圆;再如出拳这个攻击动作的角度为0,攻击半径不为0,则攻击范围为一段线段,该线段的起始点为攻击动作的起始位置;当然角度不为360度和0度时还需要设置角度的起始线。

在图2所示的实施例,需要用到预先形成的关联信息,在实现的过程中,关联信息可以以预处理过程来实现,该预处理过程包括:

步骤s211,将原始帧加载到内存中;

步骤s212,判断所述原始帧中的当前行或当前列是否存在满足所述第一预设条件的对象的轮廓点;

这里,所述第一预设条件为具有攻击性的,例如一切能够活动的对象即认为具有攻击性,那么一切活动的对象可以视为满足第一预设条件的对象,例如游戏的角色设置植物不具有攻击性,那么植物认为是不满足第一预设条件的对象;如果游戏的角色设置植物具有攻击性,那么植物认为是满足第一预设条件的对象。其中满足第一预设条件的对象是预先设置好的,可以根据对象的标识信息查询预设的列表来确定对象是否满足第一预设条件。

步骤s213,如果所述当前行不存在满足所述第一预设条件的对象的轮廓点,判断所述原始帧中是否存在下一行;如果所述原始帧中存在下一行,将所述下一行确定为当前行进行扫描,回到步骤s212;如果所述原始帧中不存在下一行,扫描结束。

步骤s214,如果所述当前行或当前列存在满足所述第一预设条件的对象的轮廓点,将所述轮廓点的位置信息和所述原始帧的标识信息形成关联信息,其中将所述原始帧的标识信息确定为满足第一预设条件的对象的标识信息。

这里,形成关联信息可以通过第二计算设备来实现,所述第二计算设备在具体实施例的过程中可以为各种类型的具有信息处理能力的电子设备,例如所述电子设备可以包括手机、平板电脑、台式机、个人数字助理、导航仪、数字电话、视频电话、电视机等。其中所述第二计算设备与所述第一计算设备可以是同一电子设备,也可以是不同的电子设备。如果第二计算设备与所述第一计算设备为不同的电子设备,如果从客户端服务器的角度来看,第二计算设备可以看作为服务器,而第一计算设备可以看作是客户端。关联信息可以由第二计算设备主动下发给第一计算设备,关联信息也可以是基于第一计算设备的请求而由第二计算设备发送给第一计算设备。

在本发明的其他实施例中,步骤s212,所述判断所述原始帧中的当前行或当前列是否存在满足所述第一预设条件的对象的轮廓点,包括:

步骤s2121,判断所述原始帧中是否有满足第一预设条件的对象;

步骤s2122,如果所述原始帧中有满足所述第一预设条件的对象,按照顺序扫描所述原始帧的行或列;

步骤s2123,判断所述当前行或当前列是否包括轮廓点。

这里,所述判断所述当前行或当前列是否包括轮廓点,包括:

步骤s2123a,按顺序逐点扫描所述当前行或当前列的像素点;

步骤s2123b,确定当前像素点的属性信息;

这里,所述当前像素点的属性包括:所述当前像素点是否为满足所述第一预设条件的对象上的像素点;所述当前像素点的位置信息是否为所在行的第一个或最后一个的像素点;与所述当前像素点相邻的像素点是否都属于满足所述第一预设条件的对象上的像素点。

步骤s2123c,判断所述属性信息是否满足第三预设条件;

这里,所述第三预设条件包括:所述当前像素点为满足所述第一预设条件的对象上的像素点,且与所述当前像素点相邻的像素点不都属于满足所述第一预设条件的对象上的像素点;或者,所述当前像素点为满足所述第一预设条件的对象上的像素点,且所述当前像素点的位置信息为所在行的第一个或最后一个的像素点。

步骤s2123d,如果所述属性信息满足所述第三预设条件,确定所述当前行或当前列包括轮廓点。

这里,如果所述属性信息不满足所述第三预设条件,确定所述当前像素点不为轮廓点;判断所述当前像素点是否为所述当前行的最后一个像素点,如果所述当前像素点不为所述当前行的最后一个像素点,将下一像素点确定为所述当前行的当前像素点;如果所述当前像素点为所述当前行的最后一个像素点,扫面下一行,回到步骤s2123a。最终得到对象的轮廓点,这些轮廓点可以形成对象的轮廓图,参见图5所示,与图1的a图或b图对比,图5的a图示出了人物10的轮廓图;与图3的c图对比,图5的b图示出了人物30的轮廓图。

在本发明的其他实施例中,步骤s201,所述判断当前帧中对象是否发生攻击动作,包括:

步骤s2011,判断所述当前帧是否有满足第一预设条件的对象;

步骤s2012,如果所述当前帧中没有满足第一预设条件的对象,确定所述当前帧中对象没有发生攻击动作;

步骤s2013,如果所述当前帧中有满足第一预设条件的对象,判断所述当前帧中的对象发生动作;

步骤s2014,判断所述当前帧中的动作是否满足第二预设条件;

步骤s2015,如果所述当前帧中的动作满足所述第二预设条件,确定所述当前帧中的对象发生攻击动作;

步骤s2016,如果所述当前帧中的动作不满足所述第二预设条件,确定所述当前帧中对象没有发生攻击动作。

这里,所述第二预设条件为具有攻击性的动作,例如人物的走路是不具有攻击性的,因此,可以认为人物的走不是不满足第二预设条件的,动作可以有标识信息。其中满足第一预设条件的动作是预先设置好的,可以根据动作的标识信息查询预设的列表来确定是否满足第二预设条件。

在上述实施例中,所述至少两个对象至少包括第一对象至第n对象,所述n为大于等于2的整数,步骤s205,所述根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果,包括:

步骤s2051,根据所述第一对象至第n对象中每一对象在所述当前场景中的位置信息和所述每一对象上的所述轮廓点的位置信息确定所述每一对象上的轮廓点的绝对位置信息;

步骤s2052,在其他维度相同时,根据所述第一对象至第n对象中两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述攻击动作是否击中,得到判断结果。

这里,所述根据所述第一对象至第n对象中两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述攻击动作是否击中,包括:根据所述两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述两两对象中其中一个对象的任一轮廓点是否位于所述两两对象中另一个对象的轮廓点所在的范围内;如果所述两两对象中其中一个对象的任一轮廓点位于所述两两对象中另一个对象的轮廓点所在的范围内,确定所述判断结果为所述攻击动作击中;如果所述两两对象中其中一个对象的任一轮廓点不位于所述两两对象中另一个对象的轮廓点所在的范围内,确定所述判断结果为所述攻击动作未击中;

这里,所述根据所述两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述两两对象中其中一个对象的任一轮廓点是否位于所述两两对象中另一个对象的轮廓点所在的范围内,包括:在同一维度上,判断所述两两对象其中一个对象的一个轮廓点是否大于所述两两对象中另一个对象的一个轮廓点且小于所述两两对象中另一个对象的另一轮廓点;如果所述两两对象其中一个对象的一个轮廓点大于所述两两对象中另一个对象的一个轮廓点且小于所述两两对象中另一个对象的另一轮廓点,确定所述判断结果为所述攻击动作击中,否则,确定所述判断结果为所述攻击动作未击中。

基于前述的实施例,本发明实施例提供一种碰撞检测方法,该方法包括预处理流程和格斗中碰撞检测流程,其中预处理流程为了形成轮廓点文件,图6为本发明实施例预处理流程的实现流程示意图,如图6所示,该流程包括以下步骤:

步骤s601,将角色动作帧图像加载到内存中;

这里,角色动作帧为本实施例游戏场景中的图像帧。

步骤s602,逐行扫面图像像素点;

步骤s603,判断当前点是否是人物轮廓点,如果是,进入步骤s604;反之,进入步骤s605;

步骤s604,将该像素点的坐标存入到数组中;

步骤s605,判断是否还有像素点需要扫描,如果否,进入步骤s606;如果是,进入步骤s602;

步骤s606,像素点扫描完毕,将存储轮廓点坐标的数组存到轮廓点文件中。

这里,在实现的过程中,轮廓点文件可以以哈希图(hashmap)的形式存在。在本发明的其他实施例中,步骤s603存在一个轮廓点判断逻辑,图7为本发明实施例判断轮廓点流程的实现流程示意图,如图7所示,该轮廓点判断逻辑包括:

步骤s701,从图像的左上角开始,向右方和下方逐行扫描;

步骤s702,每一行的最左边都是透明像素点,向右扫描遇到第一个非透明点的时候,该点就是一个轮廓点,将其位置存储到数组中;

步骤s703,遇到第一个轮廓点后继续向右扫描,接下来会遇到连续的非透明点,一直扫描到下一个透明点之前,该非透明点就是另一个轮廓点。

需要说明的是,一般一行就左右两个轮廓点,但有一些行数会在中间有空心,比如两腿之间是透明的,这时候就有四个轮廓点,遇到一些特殊动作帧甚至会有6个8个,但这些都是成双出现,而且遵循同样的规律。就是遇到第一个非透明点是轮廓点,接着遇到透明点可以找到第二个轮廓点,继续遇到下一个非透明点又是第三个轮廓点,再遇到透明点就是第四个轮廓点,如此往复。

图8为本发明实施例格斗中碰撞检测流程的实现流程示意图,如图8所示,所述格斗中碰撞检测包括:

步骤s801,游戏进程初始化;

步骤s802,将之前预处理的像素点文件预加载到内存中;

步骤s803,角色人物发生攻击动作时;

步骤s804,根据当前两个人物的动作帧图像名称,从hashmap中获取相对应的像素点集合;

步骤s805,像素点的坐标加上人物的坐标可以得出像素点相对于屏幕的绝对坐标,逐行扫面;

步骤s806,判断同一y轴上左边的人物的像素点的x轴是否大于右边人物像素点的x轴;如果是,进入步骤s808;如果否,进入步骤s807;

步骤s807,判断是否还有数据,如果否,进入步骤s809;如果是,进入步骤s805;

步骤s808,碰撞发生了;

步骤s809,碰撞没有发生;

步骤s810,检测结束。

从以上的实施例中可以看出,本发明实施例通过扫描人物的轮廓像素点,使用这些轮廓点进行碰撞检测,能够保证碰撞检测具有100%的准确率。另外,整个碰撞检测的预处理工作全部是程序自动完成的,大大节省开发成本,角色动作帧改变的时候也可以程序自动更新预处理工作。

基于前述实施例,本发明实施例提供一种碰撞检测装置,该装置所包括的各单元,各单元所包括的模块,以及各模块所包括的各子模块,都可以通过计算设备中的处理器来实现,当然也可通过逻辑电路实现;在实施的过程中,处理器可以为中央处理器(cpu)、微处理器(mpu)、数字信号处理器(dsp)或现场可编程门阵列(fpga)等。

图9为本发明实施例碰撞检测装置的组成结构示意图,如图9所示,该装置900包括第一判断单元901、第一确定单元902、第二确定单元903、第三确定单元904、第二判断单元905和第四确定单元906,其中:

所述第一判断单元901,用于判断当前帧中的对象是否发生攻击动作;

所述第一确定单元902,用于如果所述当前帧中的对象发生攻击动作,确定所述攻击动作所关联的至少两个对象的标识信息;

所述第二确定单元903,用于根据所述至少两个对象的标识信息从预设的关联信息确定所述至少两个对象的轮廓点的位置信息;

所述第三确定单元904,用于确定所述至少两个对象分别在当前场景中的位置信息;

所述第二判断单元905,用于根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果;

所述第四确定单元906,用于将所述判断结果确定为所述攻击动作的攻击结果。

在本发明的其他实施例中,所述第一确定单元,包括第一确定模块、第二确定模块、第三确定模块和第四确定模块,其中:

所述第一确定模块,用于确定所述攻击动作的属性信息;

所述第二确定模块,用于根据所述攻击动作的属性信息和所述攻击动作的初始位置确定所述攻击动作的攻击范围;

所述第三确定模块,用于将在所述攻击范围内中的对象确定为所述攻击动作的攻击对象;

所述第四确定模块,用于将所述攻击动作的所属对象的标识信息和所述攻击对象的标识信息确定为所述攻击动作所关联的至少两个对象的标识信息。

在本发明的其他实施例中,所述装置还包括加载单元、第三判断单元和形成单元,其中:

所述加载单元,用于将原始帧加载到内存中;

所述第三判断单元,用于判断所述原始帧中的当前行或当前列是否存在满足所述第一预设条件的对象的轮廓点;

所述形成单元,用于如果所述当前行或当前列存在满足所述第一预设条件的对象的轮廓点,将所述轮廓点的位置信息和所述原始帧的标识信息形成关联信息。

在本发明的其他实施例中,所述第三判断单元包括第一判断模块、扫描模块和第二判断模块,其中:

所述第一判断模块,用于判断所述原始帧中是否有满足第一预设条件的对象;

所述扫描模块,用于如果所述原始帧中有满足所述第一预设条件的对象,按照顺序扫描所述原始帧的行或列;

所述第二判断模块,用于判断所述当前行或当前列是否包括轮廓点。

在本发明的其他实施例中,所述第二判断模块,包括扫描子模块、第一确定子模块、判断子模块和第二确定子模块,其中:

所述扫描子模块,用于按顺序逐点扫描所述当前行或当前列的像素点;

所述第一确定子模块,用于确定当前像素点的属性信息;

所述判断子模块,用于判断所述属性信息是否满足第三预设条件;

所述第二确定子模块,用于如果所述属性信息满足所述第三预设条件,确定所述当前行或当前列包括轮廓点。

在本发明的其他实施例中,所述当前像素点的属性包括:

所述当前像素点是否为满足所述第一预设条件的对象上的像素点;

所述当前像素点的位置信息是否为所在行的第一个或最后一个的像素点;

与所述当前像素点相邻的像素点是否都属于满足所述第一预设条件的对象上的像素点;

所述第三预设条件包括:所述当前像素点为满足所述第一预设条件的对象上的像素点,且与所述当前像素点相邻的像素点不都属于满足所述第一预设条件的对象上的像素点;或者,所述当前像素点为满足所述第一预设条件的对象上的像素点,且所述当前像素点的位置信息为所在行的第一个或最后一个的像素点。

在本发明的其他实施例中,所述第一判断单元,包括第三判断模块、第五确定模块、第四判断模块、第六确定模块和第七确定模块,其中:

所述第三判断模块,用于判断所述当前帧是否有满足第一预设条件的对象;

所述第五确定模块,用于如果所述当前帧中没有满足第一预设条件的对象,确定所述当前帧中对象没有发生攻击动作;

所述第四判断模块,用于如果所述当前帧中有满足第一预设条件的对象,判断所述当前帧中的动作是否满足第二预设条件;

所述第六确定模块,用于如果所述当前帧中的动作满足所述第二预设条件,确定所述当前帧中的对象发生攻击动作;

所述第七确定模块,用于如果所述当前帧中的动作不满足所述第二预设条件,确定所述当前帧中对象没有发生攻击动作。

在本发明的其他实施例中,所述至少两个对象至少包括第一对象至第n对象,所述n为大于等于2的整数,所述第二判断单元包括第八确定模块和第五判断模块,其中:

所述第八确定模块,用于根据所述第一对象至第n对象中每一对象在所述当前场景中的位置信息和所述每一对象上的所述轮廓点的位置信息确定所述每一对象上的轮廓点的绝对位置信息;

所述第五判断模块,用于在其他维度相同时,根据所述第一对象至第n对象中两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述攻击动作是否击中,得到判断结果。

在本发明的其他实施例中,所述第五判断模块,用于根据所述两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述两两对象中其中一个对象的任一轮廓点是否位于所述两两对象中另一个对象的轮廓点所在的范围内;

如果所述两两对象中其中一个对象的任一轮廓点位于所述两两对象中另一个对象的轮廓点所在的范围内,确定所述判断结果为所述攻击动作击中;

如果所述两两对象中其中一个对象的任一轮廓点不位于所述两两对象中另一个对象的轮廓点所在的范围内,确定所述判断结果为所述攻击动作未击中;

在本发明的其他实施例中,所述根据所述两两对象在同一相同维度上的轮廓点的绝对位置信息判断所述两两对象中其中一个对象的任一轮廓点是否位于所述两两对象中另一个对象的轮廓点所在的范围内,包括:

在同一维度上,判断所述两两对象其中一个对象的一个轮廓点是否大于所述两两对象中另一个对象的一个轮廓点且小于所述两两对象中另一个对象的另一轮廓点;

如果所述两两对象其中一个对象的一个轮廓点大于所述两两对象中另一个对象的一个轮廓点且小于所述两两对象中另一个对象的另一轮廓点,确定所述判断结果为所述攻击动作击中,否则,确定所述判断结果为所述攻击动作未击中。

这里需要指出的是:以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果,因此不做赘述。对于本发明装置实施例中未披露的技术细节,请参照本发明方法实施例的描述而理解,为节约篇幅,因此不再赘述。

需要说明的是,本发明实施例中,如果以软件功能模块的形式实现上述的碰撞检测方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,readonlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本发明实施例不限制于任何特定的硬件和软件结合。

相应地,本发明实施例再提供一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,该计算机可执行指令用于执行本发明实施例中碰撞检测方法。

相应地,本发明实施例再提供一种计算设备,所述计算设备包括显示器和处理器,其中所述显示器用于显示图像帧,所述处理器用于判断当前帧中的对象是否发生攻击动作;如果所述当前帧中的对象发生攻击动作,确定所述攻击动作所关联的至少两个对象的标识信息;根据所述至少两个对象的标识信息从预设的关联信息确定所述至少两个对象的轮廓点的位置信息;确定所述至少两个对象分别在当前场景中的位置信息;根据所述至少两个对象分别在当前场景中的位置信息和所述至少两个对象的轮廓点的位置信息判断所述攻击动作是否击中,得到判断结果;将所述判断结果确定为所述攻击动作的攻击结果。

应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本发明的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本发明的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

在本申请所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。

上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。

另外,在本发明各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、只读存储器(readonlymemory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。

或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1