自定義的scene用initWithPhysics初始化出現的問題
1.那些使用box2d的例子通常都是auto scene=Scene::createWithPhysics()函式獲得一個擁有PhysicsWorld的Scene,那如果需要自定義怎麼辦呢?進入Scene::createWithPhysics()後,發現:
Scene *Scene::createWithPhysics()
{
if (ret && ret->initWithPhysics())
{
ret->autorelease();
return ret;
}
...
}
原來只是在呼叫初始化函式不同,其他都一樣,所以就照著在自定義的Scene的init函式裡(也可以在建構函式裡)新增”Scene::initWithPhysics();” 這麼一句,本以為已經可以了,誰知彈出這麼一個錯誤,如圖:
“hashElement->entry->markedForDeletion”,進入到CCScheduler.cpp的第482行也不知道是神馬問題,只好再進入Scene::initWithPhysics();函式:
bool Scene::initWithPhysics()
{
bool ret = false;
do
{
Director * director;
CC_BREAK_IF( ! (director = Director::getInstance()) );
this->setContentSize(director->getWinSize());
CC_BREAK_IF(! (_physicsWorld = PhysicsWorld::construct(*this)));
this->scheduleUpdate();
// success
ret = true;
} while (0);
return ret;
}
結果發現了,原來已經幫我呼叫了scheduleUpdate()函式,那麼就清楚了,因為之前我的程式碼也呼叫了一次這個函式,這裡它也呼叫一次,就是呼叫了兩次這個函式,結果就出現了上面的問題了,這裡也是做的不夠好的,如果在this->scheduleUpdate();上加這麼一句this->unscheduleUpdate();的話就不會出現上述問題了,因為無論在呼叫unschedule前是否有呼叫過schedule都不會有問題,這樣正好就可以只呼叫一次schedule了!
2.還有別忘記了在自定義的Scene的update函式裡新增”Scene::update(dt);”不然不會發現
都已經呼叫了setDebugDrawMask函式,怎麼看不到紅色邊框的?,哈哈,我就遇到這事情了—— ——
3.還還還有一個問題,糾結我幾十分鐘如下圖:
在我新增了一個PhysicsBody到Sprite裡用DebugDraw檢視有紅框框後,證明構建物理世界成功了,但當關閉程式時,卻出現瞭如上問題!是野指標...妹的,哪來的野指標?最後終於發現,原來我在為了貪方便在自定義Scene的解構函式裡新增了一句:
this->removeAllChildren();
導致上述事件的發生,足可證明removeAllChildren裡的removeAllChildrenWithCleanup函式移除的不怎麼幹淨,還沒賦nullptr,導致執行完removeAllChildren後執行Scene::~Scene析構Scene裡的DebugDraw裡的_drawNode,出現了析構野指標的bug!
相關文章
- 自定義標籤出現問題
- 自定義View的硬體加速問題View
- [iOS]自定義UICollectionView 2-1–CollectionView的實現(定義與初始化)iOSUIView
- Laravel 自定義驗證規則的問題Laravel
- flume自定義攔截器遇到的問題
- 在自定義View時碰到的奇怪問題View
- struts 自定義validate 問題
- Holer實現自定義域名訪問本地WEB應用Web
- EventSource的自定義實現
- iOS 自定義字型出問題啦!iOS自定義字型
- 自定義Android應用的訪問許可權Android訪問許可權
- SwitchResX自定義解析度時遇到的問題彙總
- Flutter自定義Banner的實現Flutter
- Flutter自定義View的實現FlutterView
- 自定義View:畫布實現自定義View(折線圖的實現)View
- 自定義View:自定義屬性(自定義按鈕實現)View
- UWP中實現自定義標題欄
- Hanlp配置自定義詞典遇到的問題與解決方法HanLP
- Android8 自定義廣播接收不到的問題Android
- 一個很奇怪的問題:關於struts自定義標籤
- 應用PPT的自定義放映功能
- 自定義RedisTemplate,解決Redis亂碼問題Redis
- QT 自定義QGraphicsItem 縮放後旋轉 圖形出現漂移問題QT
- JAVA繼承的初始化問題Java繼承
- 用css實現自定義虛線邊框CSS
- tensorflow2.0 自定義類模組列印問題
- MySQL自定義變數處理行號問題MySql變數
- POWERBUILDER KODIGO 框架 自定義透明圖片問題UIGo框架
- JavaScript實現自定義的生命週期JavaScript
- 淺談如何實現自定義的 iterator
- 自定義DropDownList控制元件的實現控制元件
- SpringBoot應用使用自定義的ApplicationContext實現類Spring BootAPPContext
- netty系列之:自定義編碼和解碼器要注意的問題Netty
- vue單頁面應用在iOS版微信下自定義分享的問題VueiOS
- 自定義key解決zabbix埠監聽取值不準確的問題
- Android 完美解決自定義preference與ActivityGroup UI更新的問題薦AndroidUI
- 使用Guava的ComparisonChain實現自定義的排序GuavaAI排序
- 在vue中,使用echarts的自定義主題VueEcharts