【cocos2dx】マルチスレッドを利用した非同期処理

【cocos2dx】マルチスレッドを利用した非同期処理
   

時間のかかる処理はユーザーにストレスを与えます。
できれば上手く工夫をして、重さを感じなくさせるよう工夫することが必要です。
今回は、そのような時に利用できる「マルチスレッド処理」についてcocos2dxで実装をしていきたいと思います。

マルチスレッドとは

プログラムの処理は通常「メインスレッド」で行われます。
コードの書かれた順番に処理を行いますので、例えば、凄く重い処理があれば、その処理が終わらないと次の処理へと移れません。
この部分で、オブジェクトの動きが止まったり、音楽が遅れたりする原因となります。

そこで用意されているのが「メインスレッド」とは別の「スレッド」で処理を行う方法です。
これが「マルチスレッド処理」と言われています。

Xcodeでのスレッドの確認方法

プロジェクトをビルドしている時に、[CPU]を調べると どの「スレッド」を利用しているかわかります。
2014-6-12-ookokkoo

通常の「メインスレッド」のみ。
2014-6-12-odokokkoo


「マルチスレッド」利用時。(Thread7がマルチスレッド)
2014-6-12-ookokko

マルチスレッドの注意点

マルチスレッドを使えば、非同期で処理が行えるので、画面の表示に時間がかかることは無くなります。
しかし、処理自体が軽くなることではないのでCPUに負担をかけます。
アプリが落ちたりする原因にもなるので、注意下さい。

マルチスレッドを実装する

今回は「cocos2dxのレシピ本」を参考にしています。
実践で利用する際には、以下の2点を考えて下さい。
  • メインスレッドで利用する変数
  • マルチスレッドでどのような処理を行うか

まずは、マルチスレッドの処理です。
今回は[POSIXスレッド]を利用しています。



以下が「メインスレッド」で利用する際の処理の一例です。
「マルチスレッド」で格納した数字をラベルで順番に表示をさせています。


最後に

cocos2dx3.xを利用しているのですが、iOS/Android共にマルチスレッドが実装できました。
ただ、実践でどのように利用するかが見えてきません。
よくあるのが「大量の画像を配置する」「大きいサイズの画像を配置する」など画像と連動して利用するのがいいのかもしれませんね。

Related Posts Plugin for WordPress, Blogger...