× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
Androidアプリを作るときは、
必要に応じてスレッドを使いながら実装しないといけない。 とくに描画周りの処理を行うなら、必ず runOnUiThread の中に実装する。そうでないとすぐ落ちる。 cocos2d-xで動かしている場合、 mainLoopから呼び出される Layer::update() メソッドは、描画スレッドの内部であるようで、描画処理(リソースの読み込みやラベルの表示等)をしてもよい(当たり前。いつもそうしてる) だが、たまにupdate()でないところから描画処理を呼び出す流れになる場合がある。 例えば ・JNI経由でJavaからC++側を呼び出したとき ・・アラートのコールバックからゲーム側を呼び出す ・・シェア結果のコールバックからゲーム側を呼び出す ・・など ・AppDelegateの中から呼び出す ・・applicationDidFinishLaunching ・・applicationWillEnterForeground ・・など ・RootViewControllerからゲーム側を呼び出す ・AppControllerからゲーム側を呼び出す など こういうとき、描画処理を行うと、 フリーズ(描画スレッドの停止。タッチには反応し、音楽も鳴るなど) 表示くずれ などの現象が起きる 上記のような流れのときは、フラグを建てるだけにしておいて、 実際の描画処理はLayer::update()からフラグをチェックして行う のように実装する。 PR |
|