AndEngineで僕がドはまりしたところ

個人的に、AndEngineはいまのところAndroidゲームエンジンの本命だと見ています。
が、日本語の情報は少なく、いざアプリをリリースしてみると、いくつかドはまりしたポイントがありました。
サンプルだけを頼りにして組むと落ちるべくして落ちる落とし穴だと思うため、メモっておきます。
開発に役立てていただければ幸いです。

IS03で起動するとjava.lang.ExceptionInInitializerError

最初は原因が全くわからず、回避策として対応OSVerを2.3以降にしていたのですが、どうやら2.3以降の一部機種でも発生することがわかりました。
対策方法はとても簡単で、AndEngine/libs/armeabiにある、「libandengine.so」をプロジェクト内のlibs/armeabiに置くだけで解決します。

【注意】
GitHubに置いてあるファイルを右クリックでダウンロードすると、htmlになっているため、ちゃんと動きません。zipで落としたものを使うか、View Rawというリンクから落として使います。

【ご参考まで】
https://github.com/nicolasgramlich/AndEngine/issues/77

sceneでメモリリークする

スプライトとテクスチャは明示的に開放する必要があるようです。

public void destroy(){

    scene.detachChild(sprite); //see! now the code is backward!

    sprite.dispose();

    atlas.unload(carrier.mEngine.getTextureManager());
    atlas.clearTextureAtlasSources();

    sprite = null;
    altas = null;
    texture = null;
    scene = null;
    System.gc();
}

【ご参考まで】
http://www.andengine.org/forums/gles2/scene-memory-leak-t6994.html

SQLcipherと併用すると、SQLcipherのライブラリを読み込まなくなる

ビルド時に他プロジェクトを参照すると、libsに置いてある他のjarファイルを読み込まなくなることがあります。
今回はSQLcipher、AndEngine両方のjarファイルをプロジェクト内のlibsに置くことで解決しました。

一部機種にてテクスチャの読み込みに失敗してsceneが表示されない

正方形かつ、幅と高さが2の累乗サイズのみのテクスチャのみ対応のVGAを搭載している機種があるようです。
このため、使用する全てのテクスチャを正方形かつ幅と高さを2の累乗サイズに変更しました。

【ご参考まで】
http://blog.livedoor.jp/abars/archives/51986755.html

直近にリリースした「しあわせスープ道場」では、端末機種毎の動作にかなり違いがあり、急遽中古のIS03を購入しました。

今回、インターフェイスや画面構成をどこまでシンプルにできるかということがソフト品質に直結すると痛感しました。

AndEngineで僕がドはまりしたところ」への5件のフィードバック

  1. はじめまして、AndEngineのScene切り替えの際のメモリリークについて調べていたところ、このサイトにたどり着きました。
    Sceneのメモリリークについて書かれており、そのソースを書き込めばいいということまではわかったのですが、どこに書くのか等がよくわからなかったため、直接ご教授させていただくためにコメントさせていただきました。
    ご多忙とは思いますが、どうぞよろしくお願いします

    • はじめまして。

      sceneを破棄するタイミングです。
      SimpleLayoutGameActivityの場合、onDestory()で良いと思います。

      (まだ調査中ですが、広告を入れたい、またはGoogle Play Game Servicesの実績やリーダーボードを入れたい場合、SimpleLayoutGameActivity一択になりそうです。)

      • 返答有難う御座います。
        教えていただいてもらって恐縮ですが、destroy関数のScene.やatlas.等は何を指定すればいいのでしょうか。
        何度も質問してすみません。よろしければ具体例等を使用して解説してくださるとありがたいです

        • atlas ⇒ BitmapTextureAtlas型のメンバ変数
          scene ⇒ Scene型のメンバ変数です。

          要するに、Sceneを再生成する際に読み込んだリソース、生成したSceneやSplite等は全て明示的に破棄する必要があるみたいです。

  2. 初めまして、AndEngineのSceneを調べたところ、こちらにたどり着きました。
    現在、AppBank社の広告を実装しようと試みているのですが、参考ページが見つからず、どうしても上手く行きません。AppBank社の広告実装について、何かご存じありませんでしょうか?宜しくお願い致します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください