[暴力的解决了]动画的碰撞区与动画的图片位置不同

Hi:
使用Cocos studio 的动画编辑器,为动画添加碰撞区后导入游戏中。
但是游戏中, 绘制的碰撞区和动画图片位置不重合,真实的碰撞发生
点是按照碰撞区发生的。在discuss.cocos2d-x.org 中也搜索到
相关问题但是没有解决 http://discuss.cocos2d-x.org/t/how-to-use-physics-with-armature/15146
寻求高人解决这个问题。

以下是导入代码:

string name = “BeautyAnimation”;
Armature* beautyTest = Armature::create(name);
beautyTest->setPosition( 100 , 200 );
this->addChild(beautyTest,20);
b2BodyDef bodyDef;
bodyDef.type =b2_dynamicBody;
bodyDef.position = b2Vec2(beautyTest->getPosition().x / PTM_RATIO, beautyTest->getPosition().y / PTM_RATIO);
b2Body* body = m_world->CreateBody(&bodyDef);
beautyTest->setBody(body);
b2Filter filter;
filter.categoryBits = 1;
filter.maskBits = 1;
for (b2Fixture* shapes = beautyTest->getShapeList(); shapes; shapes = shapes->GetNext())
{
shapes->SetSensor(false);
shapes->SetDensity(0.5f / CC_CONTENT_SCALE_FACTOR());
shapes->SetRestitution(0.0f);
shapes->SetFriction(0.2f);
shapes->SetFilterData(filter);
}

以下是问题截图

自己顶:14:
不知道大家有没有碰到这类情况,我用的动画编辑器版本是V1.6.0.0
cocos2dx 的版本是cocos2d-x-3.0rc0
碰撞包围盒是用box2d创建的, 显示包围盒用的是GLES-Render

没有人回答实在太不好了:6:
不过为了项目只能硬着头皮,自己找出一个不是那么优雅的方法:5:
希望有高人看了后能有改进意见:12:

发现是绘制b2PolygonShap绘制的坐标点有偏移在
CCColliderDetector.cpp 里有两部分和这块内容有关
所有的改动都在
ENABLE_PHYSICS_BOX2D_DETECT=1 这个预处理器定义前提下

首先是setBox()函数内:
for(auto& v : contourData->vertexList)
{
b2bv*.Set(v.x / PT_RATIO , v.y / PT_RATIO);
i++;
}
处理绘制b2PolygonShap 每个点的位置,不需要改动。 这段代码仅仅确认了绘制的点的相对位置。
然后是在updateTransform(kmMat4 &t)内:
if (shape != nullptr)
{
b2Vec2 &bv = shape->m_vertices*;
bv.Set(helpPoint.x / PT_RATIO, helpPoint.y / PT_RATIO);
}
每次矩阵转换后,都会多加一边 _body 的 position
于是改成:
if (shape != nullptr)
{
b2Vec2 &bv = shape->m_vertices*;
bv.Set(helpPoint.x / PT_RATIO - _body->GetPosition().x, helpPoint.y / PT_RATIO - _body->GetPosition().y);
}
然后问题就解决了。应该是在相对坐标转换中出了问题,但是由于cocos2dx 接触时间不长,
目前就用这个笨办吧解决。


没有用过这个功能,楼主有心了