我遇到了一个我之前没有过的非常奇怪的问题,也许我太累了,看不到明显的问题。我在渲染纹理的visit()
和begin()
之间创建RenderTexture并在绘制节点上调用end()
:
(这是我在主场景的init方法中未经修改的代码)
RenderTexture *rt = RenderTexture::create(500, 500);
rt->beginWithClear(1, 1, 1, 1);
// [1] Should create a dot in the center of the texture, but...
DrawNode *dot = DrawNode::create();
dot->drawDot(Point(250, 250), 20, Color4F::RED);
// [2] When calling this, the code crashes later, issuing an EXC_BAD_ACCESS error
// somewhere in the RenderCommand queue.
dot->visit();
rt->end();
rt->setPosition(m_visibleSize.width / 2, m_visibleSize.height / 2);
this->addChild(rt, 100000);
谢谢!
答案 0 :(得分:0)
愚蠢的我......我忘了保留dot
,所以它在块的末尾被释放,而RenderCommand队列有一个悬空指针。解决方案是
dot->retain();
在致电visit()
之前。