【发布时间】:2017-06-02 07:01:16
【问题描述】:
我在 Android 版本的 Cocos2D-X 游戏中遇到了一个奇怪的崩溃问题。
在很多地方我都有回调,当其他动作完成时执行,像这样调用:
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 上运行良好。我什至已经在 XCode for iOS 上逐步执行了回调,并验证了该对象在 iOS 上是有效的。
我没有办法在 Android 上使用调试器,所以我无法比使用日志语句更好地检查每个变量。
我已经尝试过的事情:
- 使用
[&]而不是[this]进行捕获 - 创建一个只有两个状态的
StateMachine的全新实例,这也会导致崩溃。
还有一些我现在忘记的事情。请随时向我发送任何和所有建议,我不知道是什么原因造成的。
【问题讨论】:
标签: android c++ lambda segmentation-fault cocos2d-x