请问cocostudio的做的骨骼动画只有使用物理引擎才能做碰撞检测么。
我想要获取动画里某个骨骼的位置大小自己做判断可以吗?
我使用getDisplayRenderNode得到的节点的位置但是得到的总是(0,0)
有办法得到骨骼在动画移动的相对位置吗?
参考Armaturetest中(2.x版本)TestColliderDetector示例,下面的方式是根据点来做运算的,这种事比较精确的,如果对精确度要求不高可以采用获取包围盒做运算,效率更高些。
#elif ENABLE_PHYSICS_SAVE_CALCULATED_VERTEX
void TestColliderDetector::update(float delta)
{
armature2->setVisible(true);
CCRect rect = bullet->boundingBox();
// This code is just telling how to get the vertex.
// For a more accurate collider detection, you need to implemente yourself.
CCDictElement *element = NULL;
CCDictionary *dict = armature2->getBoneDic();
CCDICT_FOREACH(dict, element)
{
CCBone *bone = static_cast<CCBone*>(element->getObject());
CCArray *bodyList = bone->getColliderBodyList();
CCObject *object = NULL;
CCARRAY_FOREACH(bodyList, object)
{
ColliderBody *body = static_cast<ColliderBody*>(object);
CCArray *vertexList = body->getCalculatedVertexList();
float minx = 0, miny = 0, maxx = 0, maxy = 0;
int length = vertexList->count();
for (int i = 0; i<length; i++)
{
CCContourVertex2 *vertex = static_cast<CCContourVertex2*>(vertexList->objectAtIndex(i));
if (i == 0)
{
minx = maxx = vertex->x;
miny = maxy = vertex->y;
}
else
{
minx = vertex->x < minx ? vertex->x : minx;
miny = vertex->y < miny ? vertex->y : miny;
maxx = vertex->x > maxx ? vertex->x : maxx;
maxy = vertex->y > maxy ? vertex->y : maxy;
}
}
CCRect temp = CCRectMake(minx, miny, maxx - minx, maxy - miny);
if (temp.intersectsRect(rect))
{
armature2->setVisible(false);
}
}
}
}
做包围盒的话,我现在只需要获得一个骨骼的位置,有什么比较简便的方法么
可以直接使用 armature->boundingBox()获取包围盒。
我想问,这个是整个动画的包围盒吧
如果我的动画就在一个位置上播放
我可以只获得里面运动中的骨骼的包围盒或者位置么
就算是和整个动画的相对位置也可以
getBone(" ")->getDisplayManager()->getBoundingBox();
这样做的,不会因为动作而产生碰撞不准的问题么?