2017-06-02 23 views
0

Android版Cocos2D-Xゲームで異常なクラッシュ問題が発生しました。私はいくつかの他のアクションが完了したときに実行するコールバックを持っている多くの場所でラムダコールバックのAndroid Cocos2D-xアプリのSegフォールト

、次のように呼び出さ:アンドロイドで

playAnimationOnce(animationName, [this] { 
    m_animationStateMachine->changeState(TWITCHING_ANIM_STATE); 
    m_stateMachine->changeState(DEAD); 
}); 

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上でデバッガを使用する方法がありませんので、各変数をlog文よりもよく調べることはできません。私はすでに試してみました


もの:

  • [&]代わりの[this]
  • ちょうど二つの状態でStateMachineの全体の新しいインスタンスを作成してキャプチャ、これもクラッシュを引き起こしていました。

そして、私が現時点で忘れているカップルの他のもの。私に何かすべての提案を送ってもらえたら、何が原因か分かりません。

答えて

0

私はそれを理解しました。

まだAndroidで問題が発生しているかどうかわかりません。その場合は教えてください。

m_animationStateMachine->changeStateが実行されると、現在実行中のアニメーションを消去する新しいアニメーションが再生され、cocos2d-xメソッドを使用してアニメーションコールバックが消去されます。

m_animationStateMachine->changeStateの後のすべての行がいくつかの未定義のコンテキストで実行されていると思います。

これは、コールバックの最後の行をm_animationStateMachine->changeStateにし、新しいアニメーションを再生する前にクラスの状態を変更することでこれを解決しました。その答えとしてこれを投稿


はので、私は数日中に質問を解決することができ、そして多分これは、将来的に他の誰かに参考になります。

関連する問題