首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cocos2d-x-3.0抽签对onDraw

cocos2d-x-3.0抽签对onDraw
EN

Stack Overflow用户
提问于 2014-03-21 02:49:14
回答 4查看 10.1K关注 0票数 5

我正在使用cocos2d-xv3.0,在一些测试项目中,我通过重写Nodedraw方法进行一些自定义绘图,但是在DrawPrimitives示例中,只要它们这样做:

代码语言:javascript
复制
void DrawPrimitivesTest::draw()
{
    _customCommand.init(_globalZOrder);
    _customCommand.func = CC_CALLBACK_0(DrawPrimitivesTest::onDraw, this);
    Director::getInstance()->getRenderer()->addCommand(&_customCommand);
}

void DrawPrimitivesTest::onDraw()
{
    // drawing code here, why?
}

从读取头文件和源文件来看,这似乎是将呈现命令直接发送到呈现器的某种方式,对吗?

我应该使用这种方法进行自定义绘图吗?drawonDraw之间有什么区别?

编辑:

正如@Pedro所提到的,由于cocos2d-X3.0,您不能再重写draw()了。您必须使用draw(Renderer *renderer, const kmMat4 &transform, bool transformUpdated)代替。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-03-22 15:04:33

将来,cocos2d-x3.x呈现程序将使用命令池进行多线程处理。

draw方法由visit方法调用,以创建新命令。当命令由命令池执行时,将调用onDraw。此时,命令在单个线程中执行,但在重载的onDraw方法中,您应该假设它将在另一个线程中调用,以简化将来的迁移。

票数 7
EN

Stack Overflow用户

发布于 2014-03-28 22:34:32

cocos2d-x RC0包上有示例,展示了如何在其他层之上使用DrawPrimitives。

在您的层中,.h添加以下内容:

代码语言:javascript
复制
private:
    void onDrawPrimitives(const kmMat4 &transform, bool transformUpdated);
    CustomCommand _customCommand;

现在,在该层的cpp中,重写层绘制方法,并包含onDrawPrimitives方法:

代码语言:javascript
复制
void MyLayer::onDrawPrimitives(const kmMat4 &transform, bool transformUpdated)
{
    kmGLPushMatrix();
    kmGLLoadMatrix(&transform);

    //add your primitive drawing code here
    DrawPrimitives::drawLine(ccp(0,0), ccp(100, 100));
}

void MyLayer::draw(Renderer *renderer, const kmMat4& transform, bool transformUpdated)
{
    _customCommand.init(_globalZOrder);
    _customCommand.func = CC_CALLBACK_0(MyLayer::onDrawPrimitives, this, transform, transformUpdated);
    renderer->addCommand(&_customCommand);
}
票数 10
EN

Stack Overflow用户

发布于 2014-09-24 07:21:38

我对debugDraw使用了这样的绘图方法,这可能会有帮助

代码语言:javascript
复制
void HelloWorld::draw(Renderer *renderer, const Mat4 &transform, uint32_t flags)
{
    Layer::draw(renderer, transform, flags);
    Director* director = Director::getInstance();
    GL::enableVertexAttribs(GL::VERTEX_ATTRIB_FLAG_POSITION );
    director->pushMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
    world->DrawDebugData();
    director->popMatrix(MATRIX_STACK_TYPE::MATRIX_STACK_MODELVIEW);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22549233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档