ステージを外部ファイルから読み込む
TMXファイルとは
TMXというファイルを使う。
RPGとかのタイルマップを表現するファイル形式。
「Tiled Map Editor」というエディタがある。調べて無いけどほかにもあるかも。
AndengineにはTMXを読み込んで、Javaオブジェクトとして簡単に利用できるようにする拡張がある。
今回のブロック崩しでは、このエディタを使ってブロックを配置してTMXファイルに保存する。
そのTMXファイルを読み込んで、画面に表示したりする。
AndengineでTMXファイルを使う準備
AndEngineTMXTiledMapExtensionをインポートして、プロジェクトを右クリックプロパティで
Androidを選択して、ライブラリを追加。
TMXファイルを使う
まずは、TMXファイルを読み込む。以下のような感じ。
// TMXファイルの読み込み
private TMXTiledMap map
try {
final TMXLoader tmxLoader = new TMXLoader(activity.getAssets(),
engine.getTextureManager(),
TextureOptions.REPEATING_NEAREST_PREMULTIPLYALPHA, vbom,
null);
map = tmxLoader.loadFromAsset("ファイル名のパス");
} catch (final TMXLoadException e) {
Debug.e(e);
}
ファイル名のパスはassetsディレクトリ基準になるので注意。
ファイル名を指定してTMXファイルを読み込んだら、TMXTiledMap型のオブジェクトが得られる。
TMXTiledMapには、タイルセット、レイヤー、オブジェクトグループというものを保持している。
エディタで作ったマップを表示したい場合は、TMXTiledMapからレイヤーを得て、sceneなどにattachすればよい。
TMXのオブジェクト
TMXファイルは、規則正しくマップチップを並べたマップだけではなく、任意の座標を使った図形も表現できる。
この図形をオブジェクトという。説明の際にややこしくならないように注意しないと。
TMXでマップチップを並べた1枚のまとまりをレイヤーと言うのに対して、オブジェクトをまとめたものをオブジェクトグループという。
このゲームでは、TMXでゲームのブロックの並びを表現するが、マップチップではなく、このオブジェクトを使ってブロックを表現する。
というのも、マップチップは正方形じゃないとダメだし、配置する座標も正方形の変の倍数に限定されるから。
TMXファイルでオブジェクトだけを使うというのも、結構特殊な使い方。本当はもっとより良い簡単な方法があるかも、まあいいか。
TMXで表現したブロックを画面に配置する。
以下が処理の流れ
- TMXTiledMapからオブジェクトグループのリストを得る
- オブジェクトグループのリストから、ブロックを配置しているオブジェクトグループを得る
- オブジェクトグループから、オブジェクトのリストを得る
- オブジェクトのリストから1つ1つオブジェクトを得て以下の処理を行う
- オブジェクトの座標、幅、高さを得る
- Andengine上に配置するEntityを座標、幅、高さから作る
- Entityにあたり判定とかのゲームロジックを設定する
- 画面にattach
コード
こんな感じ
final FixtureDef blockFixtureDef = PhysicsFactory.createFixtureDef(0,
1.0f, 0.5f);
for (final TMXObjectGroup group : map.getTMXObjectGroups()) {
if (group.getName().equals("block")) {
for (final TMXObject object : group.getTMXObjects()) {
object.getX() + 16, object.getY() + 32,
object.getWidth(), object.getHeight(), vbom);
Body body = PhysicsFactory.createBoxBody(physicsWorld,
block, BodyType.StaticBody, blockFixtureDef);
body.setUserData(new BodyData(block, "block", 1));
block.
setColor(Color.
YELLOW); block.setVisible(true);
attachChild(block);
allBlockNum++;
}
}
}
最終更新:2013年10月06日 11:56