CCArrayまたはCCSpriteBatchNodeに入れたCCSpriteの一部だけが表示されない現象

Android+Cocos2d-xのお話です。

実は細々とリリースしているアプリのAndroid版なのですが、
大々的にリリースの記事を書いていないのは実に不安定だからです・・・
(for iPhoneのフェイルセーフな機構にあまえてたのもあって単純移植でAbortしまくりとかという情けない・・・)

デバイスによって挙動が変わるのはAndroidでよくある話ですが、
今回は、どうも低スペックな機種かもしくはv2.3.3~5あたりで発生している不思議な現象にみまわれ、ググっても出てこなかったのですがどうやら解決したので情報をば。

ちなみにCocos2d-x 2.0.4ですので、もしかしたら最新では直ってるかも。NDKはr8d。

特徴は以下の通り

・表示しているはずのCCSpriteのテクスチャが消える
・一旦画面Sleep、復帰をするとテクスチャが見えるようになる
Android 2.3.3~5あたりのデバイスで発生、最近のでは発生しない

テスト端末少なすぎーですが、テスト端末の006shや知人の005shで起こってて、104shや最近の端末ではまだ見てないです。

ガベージコレクションあたりに不具合?とか思ってたのですが、CCArrayもしくはCCSpriteBatchNodeの確保の仕方で安定するようになりました。

具体的には、スプライト群をリストに入れるには、CCArrayを初期化してaddObject()するか、CCSpriteBatchNodeを初期化してaddChildするかだと思うのですが、初期化の記述で↓の違いが発生してました。

 不具合発生:

  CCArray  *a = new CCArray();
  CCSpriteBatchNode  *b = CCSpriteBatchNode::create(“sheet.png”);

 発生しない:

  CCArray  *a = new CCArray(100);
  CCSpriteBatchNode  *b = CCSpriteBatchNode::create(“sheet.png”,100);

 

上側の記述でも勝手にノードをどんどん動的に確保していってくれるものだと思ってましたが、その場合にデバイスによっては何かの拍子にテクスチャが消える現象が起こっています。

最初から容量分を見積もっておいてきちんと確保した方が良いようです。

(もし見当違いならごめんなさいです)

参考になれば幸いです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする