Notice: get_currentuserinfo の使用はバージョン 4.5.0 から非推奨になっています ! 代わりに wp_get_current_user() を使ってください。 in /var/www/html/blog/wp-includes/functions.php on line 3831 Call Stack: 0.0000 228200 1. {main}() /var/www/html/blog/index.php:0 0.0001 228640 2. require('/var/www/html/blog/wp-blog-header.php') /var/www/html/blog/index.php:17 0.1207 6110448 3. require_once('/var/www/html/blog/wp-includes/template-loader.php') /var/www/html/blog/wp-blog-header.php:19 0.1220 6119616 4. include('/var/www/html/blog/wp-content/themes/zbench/archive.php') /var/www/html/blog/wp-includes/template-loader.php:74 0.1220 6119648 5. get_header() /var/www/html/blog/wp-content/themes/zbench/archive.php:1 0.1220 6120232 6. locate_template() /var/www/html/blog/wp-includes/general-template.php:45 0.1220 6120472 7. load_template() /var/www/html/blog/wp-includes/template.php:647 0.1221 6134720 8. require_once('/var/www/html/blog/wp-content/themes/zbench/header.php') /var/www/html/blog/wp-includes/template.php:688 0.1235 6150976 9. wp_head() /var/www/html/blog/wp-content/themes/zbench/header.php:8 0.1235 6151024 10. do_action() /var/www/html/blog/wp-includes/general-template.php:2589 0.1235 6151696 11. WP_Hook->do_action() /var/www/html/blog/wp-includes/plugin.php:453 0.1235 6151792 12. WP_Hook->apply_filters() /var/www/html/blog/wp-includes/class-wp-hook.php:323 0.1333 6315576 13. call_user_func_array:{/var/www/html/blog/wp-includes/class-wp-hook.php:298}() /var/www/html/blog/wp-includes/class-wp-hook.php:298 0.1333 6316184 14. add_google_analytics() /var/www/html/blog/wp-includes/class-wp-hook.php:298 0.1335 6316968 15. ga_current_user_is() /var/www/html/blog/wp-content/plugins/google-analyticator/google-analyticator.php:1116 0.1335 6317000 16. get_currentuserinfo() /var/www/html/blog/wp-content/plugins/google-analyticator/google-analyticator.php:1289 0.1335 6317224 17. _deprecated_function() /var/www/html/blog/wp-includes/pluggable-deprecated.php:49 0.1336 6317712 18. trigger_error() /var/www/html/blog/wp-includes/functions.php:3831

Tag Archives: AndEngine

読:『はじめる! Box2DJS』

Box2DJS

Box2DJSというのはJavascriptで書かれた物理演算エンジンです。
オリジナルのBox2DはC++で書かれていて、様々な言語や環境に移植されているのですが、これはそのJavascript版という事です(正確にはActionScript 版である Box2DFlashAS3から移植されているそうです)。筆者の方が移植されてます。

AndEngineのBox2D

AndroidのゲームエンジンAndEngineにBox2Dのextensionがあって、それを勉強しようと思ったのですが、なかなか情報が無くて困ってました。
Box2Dどころか物理演算エンジンについても試したことがなかったので、色々と調べている内に、Box2Dは各方面に移植されてて、JS版もある。たくさんある(実際いくつかある)、で、達人出版で本出てるみたい、安い、買った。という。

JS版のBox2Dとしては最古

Box2DのJavascript版は複数あって、他のバージョンの方がメンテナンスされているようなのですが、お手軽な値段だったし、そもそもの目的はAndEngineのためにBox2Dの基礎が学習できれば良いので、これにしました。

何か愉快なものを作ってみようと思います。

AndEngine スプライトを表示する

「困ったらネコを出せ」

 AndEngine勉強中。
 AndEngineExamplesのコードを読み始めました。

 前回、空っぽのアプリを作ったので、それをベースに画像(スプライト)を表示します。

blue_cat

 表示する画像は何でも良かったのですが、「困ったらネコを出せ」とゴースト的な何かが頭の中で囁くのでネコを描きました。ネコに見えない?勘弁してよ。
 高さと幅は64ピクセルの正方形画像です。このファイルは、以下のパスに入れておきます。

/assets/gfx/blue_cat.png

実行結果

 画面サイズ480×800のNexus Sのエミュレータです。
 画面中止よりやや右下にズレて表示されていますが、これについては後で説明します。

CatFaceSpriteActivity

コードの解説

[gist id=5927407]

CatFaceSpriteActivity クラス

 前回作ったMainActivityの名前を変えました。
 スプライトの格納先 ASSET_BASE_PATH と ファイル名 IMAGE_FILE_NAME を追加で定義しています。

onCreateEngineOptions()

 描画領域の設定を行います。前回から特に変更ありません。

onCreateResources()

 スプライトを読み込みます。

  • Line:35
     スプライトの保存位置を設定しています。
  • Line:37
     読込用のバッファを定義しています。第2, 3パラメータにてバッファのサイズを与えていますが、以下を守るよう使用してください。

    • 読み込む画像サイズと同じかそれ以上のサイズとする
    • 2のべき乗数とする。as
  • Line:37
     ファイル名を指定して読み込むスプライトを設定します。
  • Line:41
     設定したスプライトを読み込みます(描画はまだ)。
onCreateScene()

 描画します。
 前回は背景色を定義しただけでしたが、スプライトの描画処理を付け加えています。

  • Line:48
     第1、2パラメータでスプライトを描画する起点座標を与え、スプライトオブジェクトを生成しています。スプライトの左上の点(x:0, y:0)がこの起点とマッチします。
     今回は単純に高さと幅を2で割った値(中点)としています。このためスプライトが中点より右下寄りに表示されています(正確には、x軸y軸共に32ピクセル分ずれています)。
  • Line:50
     生成したスプライトを、Sceneに追加しています。

おわり

 各種メソッドの使い方についてまだ深くわかっていない点があります。勉強を続けます。
 次回はネコを動かします。ムービングネコです。

AndEngine 何もしないアプリをつくる

SDKはいれとけ

 AndEngineをいじっています。よくわかっていないので、勉強しながらブログ書いてます。

 今回はAndEngineを用いた空っぽのプロジェクトをつくります。
 SDKのインストールなど終え、Androidアプリをビルドできる環境が整っている事が前提条件です。
 SDKインストールの話は以前に書いたのですが、もうだいぶ昔(2009)の話で内容も古いので、ビルド環境整ってない場合は他をあたってください。

 準備できたら次行きます。

とりあえずHello worldまで

AndEngineの取得

 まず、AndEngineが必要です。


 ダウンロードして任意のフォルダに保存します(僕はeclipseのworkspaceディレクトリの中にlibディレクトリ作ってその中に入れてます)。
 この前のエントリで、zipファイルでダウンロードする説明をしましたが、git cloneで取得した方が利点が多いです。ぜひgitで。

eclipseへのインポート

 取得したAndEngineのプロジェクトファイルをelipseへインポートします。
 メニューバー[ファイル]→[インポート]

1_import

 OSやeclipseのバージョン等によって少し画面は違うかもしれません。画面のとおり、インポートする種別はAndroid Codeを選んで下さい。[次へ]を押下します。

2_import2

 [Browse]ボタンから、先程ダウンロードしておいたAndEngineのディレクトリを探して設定します。あとは[完了]押して終わり。
 プロジェクト・エクスプローラにAndEngineプロジェクトが出現していれば成功です。

3_AndEngineAdded

プロジェクトの作成

 新規プロジェクトを作成します。
 メニューバー[ファイル]→[新規]→[プロジェクト]

4_NewProject

『Android Application Project』を選択して[次へ]。

5_NewAndroidApplication

 アプリの名前やパッケージ名を決めて下さい。ここではBlankAppなどとしてます。
 [次へ]。

6_NewAndroidApplication

 手順を省くため、『Create custom launcher icon』のチェックは外してます。他は特に変更せずに[次へ]。

7_NewAndroidApplication

 特に何もせず(『Blank Activity』のまま)[次へ]で進みます。

8_NewAndroidApplication

 Activityとレイアウトファイルの命名です。サンプルプログラムなのでこのままいきます。
 [完了]を押下するとプロジェクトが生成されます。この時点でビルドして実行できるプロジェクトになっています。試しに実行すると以下です。

Hello?

9_HelloWorld

AndEngineのリンクから実行まで

AndEngineとリンクする

 作成した新規プロジェクト『BlankApp』のプロパティを開きます。
 メニュー[ファイル]→[プロパティ]、もしくはプロジェクト・エクスプローラのBlankAppを右クリックして表示されるコンテキストメニューからの[プロパティ]でも同じ。
 左のツリーから『Android』を選択。

10_prop

 右下のライブラリ設定で『Add』押下でAndEngineを選択して[OK]。

11_AddAndEngine

 これでAndEngineライブラリを利用できるようになりました。

最初のコーディング

 早速、MainActivity.javaを編集していきます。
 先に見せるとできあがりはこれ。ただ灰色の画面になる。

12_BlankApp

 スタイル定義がうまくなくて、ソースの貼り付けが汚いですがごめんなさい。後で直します。

[gist id=5904733]

SimpleBaseGameActivity

  • Line:13,14
    描画領域の定義です。480×720。固定値に疑問を持つかもしれませんがとりあえずこのままで。
  • Line:12
     まず、MainActivityをSimpleBaseGameActivityのサブクラスにします。これにより、最低限以下3つのメソッドを実装する必要があります。

onCreateEngineOptions()

 AndEngineへの設定を行います。

  • Line:18
    Cameraクラスで描画領域の宣言をします。起点座標と幅、高さ。
  • Line:19
    • EngineOptions()
    1. true = フルスクリーンにする。
    2. PORTRAIT_FIXED = 縦画面
    3. RatioResolutionPolicy = 画面の拡大/縮小のオプションで、与えた幅と高さの比率を守って拡大/縮小するようにしています。
    4. 領域サイズを設定したカメラオブジェクト

onCreateResources()

 スプライトやサウンドデータの読み込みを行う場所ですが今回は不要なので何もしません。
 空実装でオケー。

onCreateScene()

 描画の実施です。

  • Line:31
    背景色を灰色に設定しています。RGBですが値の有効範囲は0〜1のfloatです。
     エミュレータの解像度が480×800なので、オプションで定義した領域より広く、少しスキマが開いているのがわかります。

おわり

 とりあえず以上でAndEngineを用いた空っぽのプロジェクトができました。

 疲れたね(キャプチャして貼り付けるのが)。

AndEngineExamplesのビルド

IMG_0808

AndEngineExamples

 AndEngineを利用したサンプルアプリであるAndEngineExamplesをビルドし、Nexus7で動かすまでを説明します。


 AndEngineExamplesは実装サンプル数が非常に豊富で、起動するとまず以下のカテゴリメニューが表示されます。括弧内の数字は、各々のカテゴリ配下のサンプル数。なななんとぜんぶで84サンプル。すごい。AndEngineでどんな事が出来るのかを知るにはうってつけです。

  • AndEngineExamples
    • Simple (5)
    • Modifier & Animation (8)
    • Touch (7)
    • ParticleSystems (3)
    • Multiplayer (3)
    • Physics (8)
    • Text (7)
    • Audio (3)
    • Advanced (3)
    • Post-Processing (2)
    • Backgrounds (3)
    • Other (22)
    • Apps (1)
    • Games (3)
    • Benchmarks (6)

GooglePlayに置いてあるよ

 そう、実はAndEngineExamples、GooglePlayに置いてある。だからビルドする必要なし。おわり。違う。このアプリ、Nexus7でGooglePlayから検索しても出てこない。Webブラウザから探すと出てくるけど、Nexus7へインストールしようとすると互換性がないと叱られてしまうんですね。
 互換性がないって事はないと思うけど公開側が許可してないなら仕方がないので自分でビルドすることにします。それがこのエントリです。

1_Screenshot_from_2013-06-20 13:49:15

ソースコードのダウンロードとインポート


 とりあえず、上記2つのソースコード(Androidプロジェクト)をダウンロードして展開します。
 フォルダ名は次のように”-GLES2″を削除しておきましょう。あとでリンクの際に煩わしい作業をしなくて済みます。

  • 『AndEngine-GLES2』 → 『AndEngine』
  • 『AndEngineExamples-GLES2』 → 『AndEngineExamples』


 次に、eclipseへインポートします。2つとも。
 プロジェクトのインポートについて詳しく書かないので、親切な他の誰かが書いている何かを見て下さい。メニュー[ファイル]→[インポート]でどうぞ。
 で、2つのプロジェクトをインポートすると、AndEngineExamplesについてはビルドエラーになるはずです。

エラーの解消1:拡張ライブラリへのリンク

 AndEngine向けに開発されたExtensionライブラリがいくつかあります。
 AndEngineExamplesは、拡張を含めた様々なサンプルを実装しているため、各種Extensionを使用しています。エラーになる理由の1つは、Extensionへのリンク切れです。

3_Screenshot_from_2013-06-20 10:44:44

 プロジェクトのプロパティを見ると必要とする拡張ライブラリがわかると思います。結構ある。
 2013/06/21現在の拡張ライブラリのライナップは12こですが、AndEngineExamplesが必要とするのは以下9こです。全部ダウンロードしましょう。ビルドに必要です。

AndEngineExamplesが必要とする拡張ライブラリ


 これらの拡張ライブラリも、展開後のディレクトリに”-GLES2″が付いてますので削除します。AndEngineMODPlayerExtensionについては、”-GLES2″ではなく”-master”です。削除して下さい。あちなみにGLES2ってのは『OpenGL ES 2』ってことですね。
 これらのライブラリを全部eclipseにインポートします。

4_Screenshot_from_2013-06-20 10:52:35

 インポートする度にリンク切れが解消されていくのがわかります。全部やって下さい。

エラーの解消2:間違ったコード

 将来的にこの問題は解消されると思いますが、現時点でのAndEngineExamplesプロジェクトはコーディングミスによりビルドが通りません。既にpull requestも出ているので、そのうち修正されるでしょう。
 以下をなおしましょう。


  • /AndEngineExamples/src/org/andengine/examples/HullAlgorithmExample.java

Line:11

修正前)
import org.andengine.entity.primitive.vbo.DrawMode;
修正後)
import org.andengine.entity.primitive.DrawMode;


  • /AndEngineExamples/src/org/andengine/examples/TextBreakExample.java

Line:106

修正前)
this.mText = new Text(50, 40, this.mFont, “”, 1000, new TextOptions(AutoWrap.LETTERS, AUTOWRAP_WIDTH, Text.LEADING_DEFAULT, HorizontalAlign.CENTER), vertexBufferObjectManager);
修正後)
this.mText = new Text(50, 40, this.mFont, “”, 1000, new TextOptions(AutoWrap.LETTERS, AUTOWRAP_WIDTH, HorizontalAlign.CENTER, Text.LEADING_DEFAULT), vertexBufferObjectManager);


  • /AndEngineExamples/src/org/andengine/examples/BoundCameraExample.java

Line:220

修正前)
final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager()).animate(100);
修正後)
final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager());
face.animate(100);


  • /AndEngineExamples/src/org/andengine/examples/SplitScreenExample.java

Line:179

修正前)
final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager()).animate(100);
修正後)
final AnimatedSprite face = new AnimatedSprite(pX, pY, this.mBoxFaceTextureRegion, this.getVertexBufferObjectManager());
face.animate(100);

これでビルドは通るはず。

AndEngine a Go Go!

Screenshot_from_2013-06-22 08:33:16

以上。

AndEngineことはじめ

AndEngine

AndEngineはAndroid向けに開発された2Dゲームエンジンです。
オープンソースでGitHubでホストされてます。

Android開発の書籍を漁ってたら、Androidで2Dゲーム作る書籍が出てて、そこで初めてAndEngineを知りました。Androidで利用できるゲームエンジンは他にもあるようですが、評判も良さそうなので少し挑戦してみることにします。

ライセンス

AndEngineはLGPLライセンスという事なのですが、すこし複雑そうなので後で整理してみようと思います。

開発環境

以下の環境で開発します。

  • PC: ThinkPad X220
  • OS: fedora 18
  • IDE: eclipse 4.2.2 JUNO
  • SDK: Android 4.2.2(API 17)
  • ADT: ver.22.0.1
  • Java: ver. 1.7.0_03

エミュレータでの動作

実機でだけ動かす人(エミュレータ使わない人)は飛ばしてください。
エミュレータでAndEngine動かないみたいな記事を読んだ気もするけど動くみたいなので書いておきます。
AVD Managerを起動して新規作成します。
以下キャプチャの設定で動きました。OSやeclipse、ADTなど諸々のバージョン差異で画面違うかもしれないけど大筋こんな感じで設定しておけばいいです。画面下部の「Use Host GPU」がキモです。忘れずに。

2_Screenshot_from_2013-06-20 02:10:50

AndEngineの入手

AndEngineライブラリはGitHubでホストされているので勝手にダウンロードしてください。

ZIPアーカイブをダウンロードします。
展開すると『AndEngine-GLES2』というディレクトリ名になりますが”-GLES2″を削除して『AndEngine』という名前に変更してから、eclipseへインポートするのが無難です。これは、ソース公開されている既存アプリが『AndEngine』の名前でライブラリへリンクを張っているためです。

次回はサンプルプログラムのビルドを行います。

読:『AndEngineでつくるAndroid 2Dゲーム』

 積読になってますた。

 AndEngineは、Android向けに開発されたオープンソースの2Dゲームエンジンで、GitHubで公開されてます。

ゲーム開発初心者でもJavaの専用ライブラリを使えばアイデアを即ゲーム化できる!

と、下世話な謳い文句がオビじゃなく表紙に印字されてて、
AndEngineで誰でもラクショーにゲーム作れるよ!
みたいな雰囲気が頂けませんが、僕もAndEngineでサクッとカジュアルゲーム作って大儲けしてみようと思います。