老师辛苦,我现在遇到的问题是这样的,编译暂时没错了,但是执行时会报错,报错信息如下:
Assert failed: child already added. It can’t be added again
Assertion failed!
Program: D:\Mygame1\proj.win32\Debug.win32\Mygame1.exe
File: CCNode.cpp
Line: 965
Expression: child->_parent == nullptr
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts
(Press Retry to debug the application - JIT must be enabled)
我也思考了原因,因为我想获取当前Layer,所以代码写成如下:
void Start::StartScene_callback(Ref sender)
{
SimpleAudioEngine::getInstance()->stopAllEffects();
VortexLayer layer88 = VortexLayer::create();
//layer88->setTargetLayer(Start::create());
layer88->setTargetLayer(
static_cast<CCLayer*>(Director::getInstance()->getRunningScene()->getChildByTag(88)));
addChild(layer88);
Director::getInstance()->replaceScene(TransitionFade::create(2.f,HelloWorld::createScene(),Color3B::WHITE));
}
原因可能是这个Layer在创建时已经被加为了当前场景的child,
Scene* Start::createScene()
{
auto scene = Scene::create();
auto layer = Start::create();
// add layer as a child to scene
scene->addChild(layer,0,88);
return scene;
}
而在setTargetLayer时又要被设为 CCRenderTexture* m_pTarget;//渲染目标的child,因而产生了错误。
void setTargetLayer(CCLayer* pLayer)
{
m_TargetLayer = pLayer;
if(m_pTarget)
{
m_pTarget->addChild(m_TargetLayer);
}
}
我分析的对吗?