我在Android版本的Cocos2D-X遊戲中遇到了一個奇怪的崩潰問題。Android Cocos2D-x應用程序在lambda回調中的Seg錯誤
在很多地方,我在完成一些其他的行動,執行回調,調用是這樣的:
playAnimationOnce(animationName, [this] {
m_animationStateMachine->changeState(TWITCHING_ANIM_STATE);
m_stateMachine->changeState(DEAD);
});
在Android上,m_animationStateMachine
能夠改變狀態就好了,但是,使得到m_stateMachine
任何引用導致飛機墜毀,具體如下:
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x3f800044
Stack frame #00 pc 008ed5ec /data/app/com.bundleID.appname/lib/arm/libcocos2dcpp.so (_ZN12StateMachine11changeStateEPK5StatePKv+52): Routine StateMachine::changeState(State const*, void const*) at /path/to/project/proj.android-studio/app/jni/../../../Platform/Util/StateMachine.cpp:158
Stack frame #01 pc 007ef73c /data/app/com.bundleID.appname/lib/arm/libcocos2dcpp.so: Routine operator() at /path/to/project/proj.android-studio/app/jni/../../../Source/Actors/Hero.cpp:1291
遊戲工作正常iOS上。我甚至在iOS上的XCode上執行回調的執行,並確認該對象在iOS上有效。
我沒有辦法在Android上使用調試器,所以我無法比使用日誌語句更好地檢查每個變量。
事情我已經試過不已:
- 與
[&]
代替[this]
- 使得
StateMachine
的一個全新的實例只有兩種狀態捕獲,這也導致飛機墜毀。
還有一些我現在忘記的東西。隨時給我任何和所有的建議,我不知道是什麼可能造成這一點。