大家好,我用box2d创建了一个三角形 但是三角形自由下落,当碰到底部的时候就消失了,。。。我已经设置好了地面 而我创建了一个圆刚体却能碰撞地面而且反弹。。。。求各位解释一下,该怎么解决呢、?
b2BodyDef body;
body.position.Set(size.width/2/PTM_RATIO, size.height/2/PTM_RATIO);
body.type = b2_dynamicBody;
b2Body *circleBody = world->CreateBody(&body);
b2CircleShape circle;
circle.m_radius = 1.0f;
b2FixtureDef fixDef;
fixDef.restitution = 0.8f;
fixDef.shape = &circle;
circleBody->CreateFixture(&fixDef);
b2BodyDef sanjiaoxingDef;
sanjiaoxingDef.type = b2_dynamicBody;
// sanjiaoxingDef.position.Set(0,0);
b2Body *sanjiaoxing = world->CreateBody(&sanjiaoxingDef);
b2PolygonShape sanjiaoxingShapeDef;
sanjiaoxingShapeDef.m_vertexCount = 3;
sanjiaoxingShapeDef.m_vertices.Set(size.width/2/PTM_RATIO, size.width/2/PTM_RATIO);
sanjiaoxingShapeDef.m_vertices.Set(400/PTM_RATIO, 257/PTM_RATIO);
sanjiaoxingShapeDef.m_vertices.Set(270/PTM_RATIO, 264/PTM_RATIO);
b2FixtureDef fixDef1;
fixDef1.restitution = 0.8f;
fixDef1.shape = &sanjiaoxingShapeDef;
fixDef1.density = 1;
sanjiaoxing->CreateFixture(&fixDef1);
void HelloWorld::initPhysics()
{
b2Vec2 gravity;
gravity.Set(0.0f,-10.0f);
bool isSleep = true;
world = new b2World(gravity);
world->SetAllowSleeping(isSleep);
world->SetContinuousPhysics(true);
m_debugDraw = new GLESDebugDraw( PTM_RATIO );
world->SetDebugDraw(m_debugDraw);
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
flags += b2Draw::e_jointBit;
//flags += b2Draw::e_aabbBit;
//flags += b2Draw::e_pairBit;
//flags += b2Draw::e_centerOfMassBit;
m_debugDraw->SetFlags(flags);
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
b2Body* groundBody = world->CreateBody(&groundBodyDef);
CCSize s = CCDirector::sharedDirector()->getWinSize();
// Define the ground box shape.
b2EdgeShape groundBox;
// bottom
groundBox.Set(b2Vec2(0,0), b2Vec2(s.width/PTM_RATIO,0));
groundBody->CreateFixture(&groundBox,0);
// top
groundBox.Set(b2Vec2(0,s.height/PTM_RATIO), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
// left
groundBox.Set(b2Vec2(0,0), b2Vec2(0,s.height/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
// right
groundBox.Set(b2Vec2(s.width/PTM_RATIO,0), b2Vec2(s.width/PTM_RATIO,s.height/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
}
824