项目引入了box2d 然后因为做了动作不同就想动态的修改box2d的shape
if(mBody->GetFixtureList())
{
// 人物站立,中心改变,调整位置
mBody->SetTransform(b2Vec2(mBody->GetPosition().x, (GROUND_HEIGHT + 40) / RATIO), mBody->GetAngle());
// 定义runner的形状,一个box,参数是半宽高
//mShape.SetAsBox(40 / RATIO, 40 / RATIO);
b2PolygonShape* tempshape = (b2PolygonShape*)mBody->GetFixtureList()->GetShape();
tempshape->SetAsBox(40 / RATIO, 40 / RATIO);
}
重新创建一个就不会出现这种情况,但是由于mBody貌似默认就带有一个空的fixtureList 重新创建就会造成多fixturelist的情况 碰撞会出问题
然后修改完之后就总往地图下面掉落了 哪位大牛能指导下为什么?
往下掉有由重力影响的,可以去掉重力影响。
去掉重力影响 不就是没重力了吗
— Begin quote from ____
引用第1楼hanrea于2014-05-15 16:53发表的 回 楼主(yuwenbai) 的帖子 :
往下掉有由重力影响的,可以去掉重力影响。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=201909&pid=952694
— End quote
if(mBody->GetFixtureList())
{
// 人物站立,中心改变,调整位置
mBody->SetTransform(b2Vec2(mBody->GetPosition().x, (GROUND_HEIGHT + 40) / RATIO), mBody->GetAngle());
// 定义runner的形状,一个box,参数是半宽高
//mShape.SetAsBox(40 / RATIO, 40 / RATIO);
b2PolygonShape* tempshape = (b2PolygonShape*)mBody->GetFixtureList()->GetShape();
tempshape->SetAsBox(40 / RATIO, 40 / RATIO);
} else{
// 人物站立,中心改变,调整位置
mBody->SetTransform(b2Vec2(mBody->GetPosition().x, (GROUND_HEIGHT + 40) / RATIO), mBody->GetAngle());
// 定义runner的形状,一个box,参数是半宽高
mShape.SetAsBox(40 / RATIO, 40 / RATIO);
b2FixtureDef fixDef;
fixDef.friction = 0.0f;
fixDef.shape = &mShape;
mBody->CreateFixture(&fixDef);
}
这是我的做法
我如果不关心有没有GetFixtureList 直接创建一个 也就是直接执行else 就没问题 就不会掉