2015-10-17 80 views
1

后面我用cocos2dx V3.8,并成功借鉴的东西与覆盖得出这样的:我怎么能借鉴的东西精灵精灵不

void Box2dManager::draw(Renderer *renderer, const Mat4& transform, uint32_t flags){ 
    GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION); 
    Director::getInstance()->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
    box2dWorld->DrawDebugData(); 
    Director::getInstance()->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
// super::draw(renderer, transform, flags); 
} 

但它总是背后的精灵。它在修改z顺序后不能更改。

解决

现在我能处理的cocos2d 3.x版的Box2D DrawDebugData问题。 我粘贴所有的cocos2dx解决代码。 V2(简单,因为V2引擎的OpenGL平局是每个单一任务)

void Box2dManager::draw(){ 
    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position); 
    kmGLPushMatrix(); 
    box2dWorld->DrawDebugData(); 
    kmGLPopMatrix(); 
} 

V3(V3引擎推动平局commond与quence核心,所以你需要创建一个回调)

void Box2dManager::draw(Renderer *renderer, const Mat4& transform, uint32_t flags){ 
    super::draw(renderer, transform, _transformUpdated); 
    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(Box2dManager::onDraw, this); 
    renderer->addCommand(&_customCommand); 
    director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
} 

void Box2dManager::onDraw() { 
    Director* director = Director::getInstance(); 
    CCASSERT(nullptr != director, "Director is null when seting matrix stack"); 
    Mat4 oldMV; 
    oldMV = director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
    director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewMV); 
    box2dWorld->DrawDebugData(); 
    director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, oldMV); 
} 

refrence: http://discuss.cocos2d-x.org/t/box2d-debug-drawing-for-cocos2d-x-3-0/11912/2 http://blog.csdn.net/zszeng/article/details/50000757

回答

1

现在我能处理的cocos2d 3.x版的Box2D DrawDebugData问题。 我粘贴所有的cocos2dx解决代码。 V2(简单,因为V2引擎的OpenGL平局是每个单一任务)

void Box2dManager::draw(){ 
    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position); 
    kmGLPushMatrix(); 
    box2dWorld->DrawDebugData(); 
    kmGLPopMatrix(); 
} 

V3(V3引擎推动平局commond与quence核心,所以你需要创建一个回调)

void Box2dManager::draw(Renderer *renderer, const Mat4& transform, uint32_t flags){ 
    super::draw(renderer, transform, _transformUpdated); 
    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(Box2dManager::onDraw, this); 
    renderer->addCommand(&_customCommand); 
    director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
} 

void Box2dManager::onDraw() { 
    Director* director = Director::getInstance(); 
    CCASSERT(nullptr != director, "Director is null when seting matrix stack"); 
    Mat4 oldMV; 
    oldMV = director->getMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW); 
    director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, _modelViewMV); 
    box2dWorld->DrawDebugData(); 
    director->loadMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW, oldMV); 
} 

refrence: http://discuss.cocos2d-x.org/t/box2d-debug-drawing-for-cocos2d-x-3-0/11912/2 http://blog.csdn.net/zszeng/article/details/50000757

+0

我不得不使用'_customCommand.init(_globalZOrder + 1);'到初始化第e自定义渲染命令,否则Box2d相关的东西会呈现在精灵之后。任何想法热解决这个?我正在使用cocos2d-x 3.10。 – rraallvv

0

你怎么样用一个DrawNode并将其添加为一个孩子?如果您要使用您在绘图树上管理的节点,那么维护起来会更容易。

auto myDrawing = DrawNode::create(); 
myDrawing::drawRect(p1, p2, p3, Color4F(255, 255, 0, 255)); 
myDrawing::setLineWidth(2) 
this->addChild(myDrawing); 
0
virtual void draw (cocos2d::Renderer* renderer, const cocos2d::Mat4& transform,uint32_t flags) override; 
    cocos2d::CustomCommand _customCmd; 
void onDraw(const cocos2d::Mat4 &transform, uint32_t flags); 



void linedraw:: draw(cocos2d::Renderer* renderer, const cocos2d::Mat4 &transform, uint32_t flags){ 
     //cocos2d::Layer::draw(renderer, transform, flags); 


     _customCmd.init(1); 
     _customCmd.func = CC_CALLBACK_0(linedraw::onDraw, this, transform, flags); 
     renderer->addCommand(&_customCmd); 

    } 

     void linedraw:: onDraw(const cocos2d::Mat4 &transform, uint32_t flags) 
     { 

      }