2016-11-24 40 views
0

我有代碼的Cocos2D-X removeChild之作品奇怪

for (auto view : views) 
{ 
    view->update(deltaTime); 

    if (view->isDead()) 
    { 
     trash.push_back(view); 
     removeChild(view, true); 
    } 
} 

此線,它打破了在removeChild(view, true);線。

這是我的堆棧跟蹤。

ucrtbased.dll!00007ffab25ac2f1() Unknown 
    ucrtbased.dll!00007ffab25af8a5() Unknown 
    TankGame.exe!operator delete(void * block) Line 21 C++ 
    TankGame.exe!operator delete(void * block, unsigned __int64 __formal) Line 16 C++ 
    TankGame.exe!WorldModel::`scalar deleting destructor'(unsigned int) C++ 
    TankGame.exe!std::_Ref_count<WorldModel>::_Destroy() Line 153 C++ 
    TankGame.exe!std::_Ref_count_base::_Decref() Line 113 C++ 
    TankGame.exe!std::_Ptr_base<WorldModel>::_Decref() Line 339 C++ 
    TankGame.exe!std::shared_ptr<WorldModel>::~shared_ptr<WorldModel>() Line 567 C++ 
    TankGame.exe!std::shared_ptr<WorldModel>::operator=(std::shared_ptr<WorldModel> && _Right) Line 555 C++ 
    TankGame.exe!ZombieModel::~ZombieModel() Line 14 C++ 
    [External Code] 
> TankGame.exe!ZombieView::~ZombieView() Line 11 C++ 
    [External Code] 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Ref::release() Line 138 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Vector<cocos2d::Node * __ptr64>::erase(__int64 index) Line 443 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Node::detachChild(cocos2d::Node * child, __int64 childIndex, bool doCleanup) Line 1119 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Node::removeChild(cocos2d::Node * child, bool cleanup) Line 1020 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Sprite::removeChild(cocos2d::Node * child, bool cleanup) Line 778 C++ 
    TankGame.exe!WorldView::update(float deltaTime) Line 51 C++ 
    TankGame.exe!GameScene::update(float deltaTime) Line 55 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Scheduler::scheduleUpdate::__l2::<lambda>(float dt) Line 285 C++ 
    [External Code] 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Scheduler::update(float dt) Line 861 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::Director::drawScene() Line 274 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::DisplayLinkDirector::mainLoop() Line 1397 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::GLViewImpl::OnRendering() Line 482 C++ 
    libcocos2d_v3.13.1_Windows_10.0.dll!cocos2d::GLViewImpl::Render() Line 474 C++ 
    TankGame.exe!Cocos2dRenderer::Draw(int width, int height, float dpi, Windows::Graphics::Display::DisplayOrientations orientation) Line 137 C++ 
    TankGame.exe!CocosAppWinRT::OpenGLESPage::StartRenderLoop::__l2::<lambda>(Windows::Foundation::IAsyncAction^action) Line 272 C++ 
    [External Code] 

而我無法得到它想要的東西。它調用視圖析構函數,就是這樣!巴姆!嘩啦啦!視圖的解構者是空的,我完全迷失了。

回答

0

我敢打賭,你已經多次調用該代碼。

然後,在您調用removeChild(view,true)一次後,自動視圖已被刪除,並且您沒有從視圖中刪除視圖。當然,如果你嘗試刪除已被刪除的視圖,程序會崩潰。

如果我的猜測是錯的,你需要發佈更多的代碼。

P.S: 您的代碼風格在Cocos2d-x中不是很好。您不需要收集像Java一樣的垃圾。您需要研究Cocos2d-x中的內存管理。