cocos2dx 3D战斗类游戏制作:【六】——没什么鬼用的3D准像素碰撞

动作游戏,当然少不了碰撞检测的问题。cocos可以很简单地通过获取精灵模型的OBB,通过obb的相交性来做碰撞检测。不过,通过简单的OBB来做碰撞检测,并不会很精确,至少——你不知道一刀砍中了对方的头还是脚。

本文说的,不过是一个没什么鬼用的更加精确的碰撞检测方法,虽然能表达那么个意思,但是这个方法好像真的没什么鬼用。。。。。。。。。。

先上图:

图中,tifa在头部放了一个包围盒,而lightning的左右手,分别带了一个包围盒,当然,还可以放很多很多的包围盒,胳膊放一对,胸部来一个,屁股来一个。。。。。。。。。。。。。。YY之下,如果LT的手打中了Tifa的头或者胸,那么tifa会做出不同的受击反应,打中头那当然会晕了对不对,打中了胸。。。。。。女孩子么,肯定会恼羞成怒撒泼的:877:

其实呢,玩3D玩的熟的,应该已经不用向下看了,呵呵。因为。。。。。。这个鬼方法的实现。。。。。。。。是非常土地直接取骨骼,给骨骼加一个子模型对象,然后取子模型对象的包围盒就好了。

Tifa的头:

        auto cube = Sprite3D::create("3D/cube.c3b");
        bossSprite->getAttachNode("head")->addChild(cube);


```


LT的手:
            auto _weaponL = Sprite3D::create("3D/lt/bowgun.c3b");
            _spriteLT->getAttachNode("l_hand")->addChild(_weaponL);
            auto _weaponR= Sprite3D::create("3D/lt/sword.c3b");
            _spriteLT->getAttachNode("r_hand")->addChild(_weaponR);


```



不熟悉3D的呢,可能会疑惑,那head,l_hand,r_hand是啥玩意啊?想知道很简单,去问做模型的美工,特别是管骨骼动画的那个人,叫他把模型骨骼带名称打印一份给你,就一目了然了。例如下面两幅图:

 

   

模型的每根骨骼,在max里面都有一个名称的,cocos里面可以使用getAttachNode("骨骼名称")得到这根骨骼,然后就可以在它上面加一个精灵,通过这个精灵来获取这根骨骼的实时位置。

为什么不直接用getPosition3D()来获取骨骼位置呢?为什么不直接OBB()这个骨骼呢?因为。。。。。。。cocos还不支持。。。。。。。。。。


好了,其实通篇都是废话,对吧,哈哈。不过呢,如果你象我一样,居然想试试两个妹子精确的身体对碰能做个什么样的AI,那么,这个方法应该有点参考价值的。毕竟纯粹两个大OBB的碰撞,就只能知道谁打了谁,现在,咱们是可以知道谁的什么部位打到了谁的什么部位了,要让被袭胸的tifa妹恼羞成怒起来,咱有数据触发条件了!

悄悄地说——简单测试了一下,方法虽然土,虽然还并不是3D物理碰撞,也并不是像素级别的碰撞,但是稍微配合一点相应的受击动画,打击感真的跟两个盒子碰那种有不一样的感觉。

其实呢会想到测试这么一个方法,是因为感觉3D对战部分太闷了,boss AI低下,打到哪都是不相干的受伤动作,賊没意思。但是就算用这方法,也不会有大的突破,还是有限状态机给出的特定受击动作,啥时候cocos能支持3D物理就好了,嘿嘿,那就不用搞这些没鬼用的测试了。



后记:今天跟技术群一些素未谋面的朋友聊了下战斗AI,有些关于上文的后续资讯,贴出来,嘿嘿。

首先,是互相攻击与打断的逻辑。假设对方跳起挥刀从头顶劈下,在他还没劈到自己之前捅到他(我方武器obb碰触到对方身体obb),那么他动作终止,受伤回退。如果还没来得及动作就已被他劈到(对方武器obb碰到我方身体),那么我方受伤回退,攻击招式被打断。

如对方的动画连招是一边冲前一边连劈三刀,我方放出的招式是后退一步再一刀劈下,那么,对方第一刀将被躲过,在对方第二刀未劈出之际,我方一刀已劈下,对方招式被打断,受伤回退。。。。。而如果我方选择的招式是直接劈出一刀,那么只要落后对方一瞬间,就一定会被对方第一刀劈中,接下来两刀也一并劈中(因第一刀后我方已进入被打断受攻击状态)

其次,是模型骨骼动画连招,每刀随动作的姿态看起来的伤害应该不同的问题。与朋友们讨论获得一个简单的思路——本帧读取并缓存武器位置,下一帧,对比武器位置的差值,差值越大说明武器挥动速度越快,那么打到人也就越疼。

这两点,对于增强格斗的打击感和提升Ai的用户体验,应该是有点用处的,呵呵,反正是跟朋友们讨论出来的,所以不私藏,发出来大家都可以思考思考,说不定能产生什么好思路用到自己的游戏呢。

:14::14::14::14::14::14::14::14::14::14:路过

楼主的模型很不错啊。。。要是分享下就更好了。。。

我也在做3D 格斗。不过;直接选择了U3D 。。。。当然了。做游戏的逻辑是一样的。。

期待跟楼主同分享经验哈。。。