0
를 겪고 난 모든 것을 검색 한 다이나믹 한 몸이 지상의 몸과 충돌되지 않는 이유를 아직받지 내 코드동적 몸은 지상 상자
_debugDraw = new GLESDebugDraw(PTM_RATIO);
b2Vec2 gravity = b2Vec2(0.0f, -8.0f);
world = new b2World(gravity);
world->SetContinuousPhysics(true);
// Enable debugging flags.
uint32 flags = 0;
flags += b2Draw::e_shapeBit;
//flags += b2Draw::e_jointBit;
//flags += b2Draw::e_aabbBit;
//flags += b2Draw::e_pairBit;
//flags += b2Draw::e_centerOfMassBit;
_debugDraw->SetFlags(flags);
world->SetDebugDraw(_debugDraw);
bool doSleep = false;
world->SetAllowSleeping(doSleep);
//////////////////
b2BodyDef myBodyDef;
myBodyDef.type = b2_staticBody;
myBodyDef.position.Set(0, 0);
b2Body* staticBody = world->CreateBody(&myBodyDef);
b2PolygonShape polygonShape;
b2FixtureDef myFixtureDef;
myFixtureDef.shape = &polygonShape;
myFixtureDef.density = 1;
myFixtureDef.friction=0.3f;
//add four walls to the static body
polygonShape.SetAsBox(5.5, 0.5, b2Vec2(6, 2), 0);//ground
staticBody->CreateFixture(&myFixtureDef);
polygonShape.SetAsBox(5.5,0.5, b2Vec2(6, 8), 0);//ceiling
staticBody->CreateFixture(&myFixtureDef);
polygonShape.SetAsBox(0.5, 3, b2Vec2(0.6, 5), 0);//left wall
staticBody->CreateFixture(&myFixtureDef);
polygonShape.SetAsBox(0.5, 3, b2Vec2(11.5, 5), 0);//right wall
staticBody->CreateFixture(&myFixtureDef);
///////////////
b2BodyDef playerspriteBodyDef;
playerspriteBodyDef.type = b2_dynamicBody;
playerspriteBodyDef.position.Set(4,4);
// playerspriteBodyDef.userData = playerSprite;
playerspriteBody = world->CreateBody(&playerspriteBodyDef);
b2PolygonShape playerspriteShape;
playerspriteShape.SetAsBox(1,1);
b2FixtureDef playerspriteShapeDef;
playerspriteShapeDef.shape = &playerspriteShape;
playerspriteShapeDef.density = 10.0;
playerspriteShapeDef.friction=0.3;
playerspriteShapeDef.isSensor = true;
playerspriteBody->CreateFixture(&playerspriteShapeDef);
//////////////////////////
b2BodyDef obstacle1spriteBodyDef;
obstacle1spriteBodyDef.type = b2_dynamicBody;
obstacle1spriteBodyDef.position.Set(10,4);
obstacle1spriteBody = world->CreateBody(&obstacle1spriteBodyDef);
b2PolygonShape obstacle1spriteShape;
obstacle1spriteShape.SetAsBox(0.5,0.5);
b2FixtureDef obstacle1spriteShapeDef;
obstacle1spriteShapeDef.friction=0.3;
obstacle1spriteShapeDef.shape = &obstacle1spriteShape;
obstacle1spriteShapeDef.density = 10.0;
obstacle1spriteShapeDef.isSensor = true;
obstacle1spriteBody->CreateFixture(&obstacle1spriteShapeDef);
contactListener = new MyContactListener();
world->SetContactListener(contactListener);
schedule(schedule_selector(HelloWorld::tick));
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::draw()
{
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
world->DrawDebugData();
// restore default GL states
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
}
void HelloWorld::tick(float dt)
{
int velocityIterations = 8;//8
int positionIterations = 1;//1
// Instruct the world to perform a single step of simulation. It is
// generally best to keep the time step and iterations fixed.
world->Step(dt, velocityIterations, positionIterations);
world->DrawDebugData();
}
내가이의 연락처 리스너를 작성해야 할 것입니다. 나는 접촉 리스너를 사용하는 방법을 알고하지만 여전히 사용 여부를
응답을 기대할지 궁금
감사합니다 Martijn. position_iterations 값에 대해 – guruD
+1을 수행했는데, 내 것이 1이었고 물리학이 매우 이상하게 작동했습니다. –