void GameLevelSence::initPhysics(void){
Size visibleSize = Director::getInstance()->getVisibleSize();
Vec2 origin = Director::getInstance()->getVisibleOrigin();
b2Vec2 gravity;
gravity.Set(0.0f, -10.0f);
_world = new b2World(gravity);
_world->SetAllowSleeping(true);
_world->SetContinuousPhysics(true);
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner
b2Body* groundBody = _world->CreateBody(&groundBodyDef);
b2EdgeShape groundBox;
groundBox.Set(b2Vec2((origin.x+DEBUG_NUM)/PTM_RATIO,(origin.y+DEBUG_NUM)/PTM_RATIO), b2Vec2((origin.x+visibleSize.width-DEBUG_NUM)/PTM_RATIO,(origin.y+DEBUG_NUM)/PTM_RATIO) );
groundBody->CreateFixture(&groundBox,0);
groundBox.Set(b2Vec2(origin.x/PTM_RATIO,(origin.y+visibleSize.height)/PTM_RATIO), b2Vec2((origin.x+visibleSize.width)/PTM_RATIO,(origin.y+visibleSize.height)/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
groundBox.Set(b2Vec2(origin.x/PTM_RATIO,(origin.y+visibleSize.height)/PTM_RATIO), b2Vec2(origin.x/PTM_RATIO,origin.y/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
groundBox.Set(b2Vec2((origin.x+visibleSize.width)/PTM_RATIO,(origin.y+visibleSize.height)/PTM_RATIO), b2Vec2((origin.x+visibleSize.width)/PTM_RATIO,origin.y/PTM_RATIO));
groundBody->CreateFixture(&groundBox,0);
GLESDebugDraw *m_debugdraw=new GLESDebugDraw(PTM_RATIO);
_world->SetDebugDraw(m_debugdraw);
//调试绘制标签
uint32 flags=0;4
flags+=b2Draw::e_shapeBit;
flags+=b2Draw::e_aabbBit;
flags+=b2Draw::e_jointBit;
flags+=b2Draw::e_pairBit;
flags+=b2Draw::e_centerOfMassBit;
m_debugdraw->SetFlags(flags);
}
void GameLevelSence::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
Scene::draw(renderer, transform, flags);
GL::enableVertexAttribs( cocos2d::GL::VERTEX_ATTRIB_FLAG_POSITION );
Director* director = Director::getInstance();
CCASSERT(nullptr != director, "Director is null when seting matrix stack");
director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
_modelViewMV = director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
_customCommand.init(_globalZOrder);
_customCommand.func = CC_CALLBACK_0(GameLevelSence::onDraw, this);
renderer->addCommand(&_customCommand);
director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
}
void GameLevelSence::onDraw(void)
{
Director* director = Director::getInstance();
CCASSERT(nullptr != director, “Director is null when seting matrix stack”);
auto oldMV = director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewMV);
_world->DrawDebugData();
director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, oldMV);
}
GameLevelSence::draw 始终在执行的我是参照例子中的 Box2dTest