有使用spine边缘盒boundingBox做过碰撞检测的吗

请问一下这个vertices顶点数据该怎样与骨骼、权重进行计算得到当前位置的boundingBox啊QAQ, creator没提供直接获取boundingBox数据的方法吗? 看了一下spine官方的api里是有的… 但spine.Skeleton和sp.Skeleton结构不一样啊…不知道怎样才能得到正确的rect数据… 一周时间翻阅了好多好多资料还是没能解决.绝望 T_T
顺便问一下可不可以获得当前动画的帧数?还有播放到第几帧和指定帧位置进行播放.

前辈们请帮帮我~

你是說aabb邊界嘛?

取vectices[0] vectices[2] vectices[4] vectices[6]最小值minX和最大值 maxX
取vectices[1] vectices[3] vectices[5] vectices[7]最小值minY和最大值 maxY
rect = (minX, minY, maxX-minX, maxY-minY)

動畫我不懂,cocos的動畫和編輯器從來不用。

spine自带了接口的,但是如果是小游戏的话不建议用spine的obb包围盒做碰撞- -会卡爆的。
spine的skeletonBounds有两个接口
aabbIntersectsSkeleton
aabbContainsPoint

  • -这种最好还是用圆来做碰撞,可以多做几个圆,增加碰撞的精度。一般的需求都够用,而且效率还可以

我覺得我沒理解你的問題。

spine里依旧可以使用spine的skeletonBounds组件,但是创建的时候,把这些bounds全部替换为圆数据。
也就是spine里画一个矩形表示碰撞点,程序里还是用圆来计算

没关系啦~ 可能是我描述的不太清楚. 就是除了rect顶点之外还有旋转,比如一个平行四边形的碰撞盒…

你非要用spine的包围盒也可以,new sp.skeletonBounds
然后保存下这个skeletonBounds,
需要碰撞的时候使用
SkeletonBounds.update(skeleton: spine.Skeleton, updateAabb?: boolean): void
更新下包围盒
aabbContainsPoint
aabbIntersectsSkeleton
aabbIntersectsSegment
这几个是碰撞检测的接口

1赞

这个碰撞计算了朝向的,但是平行四边形是什么东东 0 0

还有就是, spine的skeletonData和creator里的sp. skeletonData不一样… json数据不能直接解析.想过用spine官方的API来获得数据,但不知道该如何在确保sp.skeletonData动画播放的同时另一边的skeletonBounds的数据也时实计算. 好像问题越来越复杂了, 然后格斗类游戏只有2名角色,所以效率什么的应该不会有太大问题QAQ 最重要的是能使用就好了…

creator的sp里没有skeletonBounds …

这个可以放在update函数里去计算,脚本的update和动画的update应该是同一个update数组里的,基本是同时的

如果引擎没有实现,就只能自己去改,集成下这块了- -等更新的话,可能你游戏都出来了:joy:

sp.Skeleton._sgNode.getBoundingBox()返回的就是包围盒

_sgNode没这个属性