Armature::getShapeList 是否是获取在cocosstudio 编辑器中设置的碰撞区域
获取到之后如何使用
我现在的问题是 使用BOX2D getShapeList 获取不到碰撞区域会报错 能不能提供下可以参考的代码谢谢
你好,请检查下宏设置是否正确。
宏设置是正确的 开启了BOX2D 编辑器中也设置了碰撞区域 在用Armature 对象调用 getShapeList()方法的时候 获取到的b2Fixture 对象是空
有没有具体的实例 能体现出 编辑器中的碰撞区域是如何关联到代码的 如果我获取到b2Fixture 是用b2Fixture->GetBody(); 方法获取body 对象然后用Armature 的setBody 方法么?
关于这个问题我到论坛有很多提问但都是没有解决的,请求斑竹能弄一个例子,看能不能详细解决一下这个问题
我进入到getShapeList 方法
b2Fixture*Armature::getShapeList()
{
if(_body){
return _body->GetFixtureList();
}else{
return nullptr;
}
首先 我就是想通过该方法获取碰撞区域来设置body 现在 要从body获取 这里不是很理解 能不能给段代码 还是说在Armature 生成的时已经产生body了
}
// 加载
ArmatureDataManager::getInstance()->addArmatureFileInfo(“DemoPlayer0.png”,“DemoPlayer0.plist”,“DemoPlayer.ExportJson”);
armature = Armature::create("DemoPlayer");
armature->setPosition(Point(visibleSize.width * 0.8,visibleSize.height * 0.5));
armature->getAnimation()->playByIndex(0);
armature->setScale(0.25);
this->addChild(armature);
// 设置body
auto playerPos = Point(armature->getPositionX(), armature->getPositionY());
b2BodyDef bodyDef2;
bodyDef2.type = b2_dynamicBody;
bodyDef2.position.Set(playerPos.x/PT_RATIO, playerPos.y/PT_RATIO);
bodyDef2.userData = armature;
b2Body *playerBody = world->CreateBody(&bodyDef2);
//playerBody->CreateFixture(&fixtureDef2);
playerBody->SetGravityScale(10);
armature->setBody(playerBody);
// 设置filter
b2Filter filter;
filter.categoryBits = 1;
filter.maskBits = 1;
for (b2Fixture* shapes = armature->getBody()->GetFixtureList(); shapes; shapes = shapes->GetNext())
{
//shapes->SetSensor(true);
shapes->SetDensity(5.0f/CC_CONTENT_SCALE_FACTOR());
shapes->SetRestitution(1.0f);
shapes->SetFriction(0.2f);
shapes->SetFilterData(filter);
}