ネットにあるいくつかの日本語資料はAndEngineの古いバージョンでの話だったり
Exampleだけ見ても、実際にtmxファイルをどうやって準備すればいいのかなどが分からなかった
やっと使い方が分かったのでメモしておきます
まず前提として
AndEngineのほかに
AndEngineTMXTiledMapExtension
をインポートしておく必要がある
AndEngineTMXTiledMapExtensionのある場所は公式のgitにあります
拡張のインポート方法は過去の記事でも触れてきたので割愛
(普通にインポートすればいいだけです)
1、マップタイル画像の準備
ネットで「マップタイル 素材」とかで調べればフリーの素材サイトがたくさん出てきます
今回はぴぽや様のマップセット1、320x240用マップチップを使います
タイルサイズ16x16のウディタというツールで利用されている有名なマップタイルセットです。
2、Tiledのインストール
Tiledというソフトをダウンロードします
![]() |
| Tiledの公式ページトップ |
![]() |
| Tiledの公式ダウンロードページ |
自分のOSにあったバージョンをダウンロードして、インストールしましょう
3、Tiledでマップデータを作る
Tiledを使ってマップを作りましょう
新規作成ボタンで新しいマップを作成します
レイヤー・フォーマットはBase64(gzip圧縮)を選択します
マップの大きさはとりあえず20x20にしておきましょう
今回使うタイルの大きさは16x16ですので16x16に
次はタイルセットを使えるようにしましょう
マップ⇒新しいタイルセットを選択
画像のパスを選択して、タイル情報を入れます
今回使うタイルセットは16x16で余白などは無しなので以下の画像の通りに設定
右下にタイルセットが出るようになりました
後はお絵かきの要領でマップを作っていきます
レイヤー分けなどもできますが、今回の説明では割愛
出来たらファイル名を付けて保存しましょう
とりあえず「map01.tmx」としておきました。
4、Androidプロジェクトを作成
ホームページに置いてあるHelloWorldを基に作成していきます
とりあえずプロジェクトの名前をTileTestに変更しておきましょう
とりあえずプロジェクトの名前をTileTestに変更しておきましょう
ライブラリを追加
AndEngineをライブラリ登録したのと同じようにAndEngineTMXTiledMapExtensionをライブラリ登録します
tmxファイルの画像パスの編集
先ほど作ったmap01.tmxファイルをテキストエディタで開きましょう。
<image source= "画像ファイルのパス">
となっているところがあると思います
この画像ファイルのパスを"gfx/画像ファイル名"
となるように編集しましょう
例えばmapchip.pngというマップタイル画像を使っている場合は
<image source= "gfx/mapchip.png">
とすればOKです
(例)
<image source= "画像ファイルのパス">
となっているところがあると思います
この画像ファイルのパスを"gfx/画像ファイル名"
となるように編集しましょう
例えばmapchip.pngというマップタイル画像を使っている場合は
<image source= "gfx/mapchip.png">
とすればOKです
(例)
<?xml version="1.0" encoding="UTF-8"?> <map version="1.0" orientation="orthogonal" width="20" height="20" tilewidth="16" tileheight="16"> <tileset firstgid="1" name="mapchip" tilewidth="16" tileheight="16"> <image source="gfx/mapchip.png" trans="ffffff" width="128" height="1056"/> </tileset> <layer name="タイル・レイヤー1" width="20" height="20"> <data encoding="base64" compression="gzip"> H4sIAAAAAAAAC1NkYGBQxIKVoBibHDmY2uYpopm3EIgXAfFiHHxSzVsJxKuAeDUOPrH+hZm5EYg3AfFmHHxs+nBhasQDunnkhh8ut5Ebfrj8SWz4EWsetdMxNcIPWZwa4YdsJrnhR8hcaqZFaptHq7xEq7w5FDEAH4dOuEAGAAA= </data> </layer> </map>
タイルセット画像とtmxファイルをプロジェクトのフォルダに入れる
これで準備完了です。
後はコードを書いていきましょう
Fieldsにタイルマップの格納変数
後はコードを書いていきましょう
5、MainAcivity.javaにコードを追加
Fieldsにタイルマップの格納変数
private TMXTiledMap mTMXTiledMap; // タイルマップを追加
// =========================================================== // Fields // =========================================================== private Font mFont; // 標準フォントを格納するフィールド private TMXTiledMap mTMXTiledMap; // タイルマップ
protected Scene onCreateScene()の中にマップの読み込み処理とシーンへのattachを追加
//TMX mapの読み込み
try{
final TMXLoader tmxLoader = new TMXLoader(this.getAssets(), this.mEngine.getTextureManager(), TextureOptions.BILINEAR_PREMULTIPLYALPHA, this.getVertexBufferObjectManager(), new ITMXTilePropertiesListener() {
@Override
public void onTMXTileWithPropertiesCreated(final TMXTiledMap pTMXTiledMap, final TMXLayer pTMXLayer, final TMXTile pTMXTile, final TMXProperties<TMXTileProperty> pTMXTileProperties) {
}
});
this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/map01.tmx");
}catch (final TMXLoadException tmxle) {
Debug.e(tmxle);
}
// レイヤーをSceneに結びつける
for (int i = 0; i < this.mTMXTiledMap.getTMXLayers().size(); i++){
TMXLayer layer = this.mTMXTiledMap.getTMXLayers().get(i);
scene.attachChild(layer);
}
一応全ソースを置いておきます
MainActivity.java
package test.andengine.tiletest;
import org.andengine.engine.camera.Camera;
import org.andengine.engine.options.EngineOptions;
import org.andengine.engine.options.ScreenOrientation;
import org.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.Background;
import org.andengine.entity.text.Text;
import org.andengine.entity.text.TextOptions;
import org.andengine.extension.tmx.TMXLayer;
import org.andengine.extension.tmx.TMXLoader;
import org.andengine.extension.tmx.TMXProperties;
import org.andengine.extension.tmx.TMXTile;
import org.andengine.extension.tmx.TMXTileProperty;
import org.andengine.extension.tmx.TMXLoader.ITMXTilePropertiesListener;
import org.andengine.extension.tmx.TMXTiledMap;
import org.andengine.extension.tmx.util.exception.TMXLoadException;
import org.andengine.opengl.font.Font;
import org.andengine.opengl.font.FontFactory;
import org.andengine.opengl.texture.TextureOptions;
import org.andengine.ui.activity.SimpleLayoutGameActivity;
import org.andengine.util.HorizontalAlign;
import org.andengine.util.debug.Debug;
import test.andengine.tiletest.R;
import android.graphics.Typeface;
public class MainActivity extends SimpleLayoutGameActivity {
// ===========================================================
// Constants
// ===========================================================
// 画面サイズを設定
private static final int CAMERA_WIDTH = 480;
private static final int CAMERA_HEIGHT = 720;
// ===========================================================
// Fields
// ===========================================================
private Font mFont; // 標準フォントを格納するフィールド
private TMXTiledMap mTMXTiledMap; // タイルマップ
// ===========================================================
// Constructors
// ===========================================================
// ===========================================================
// Getter & Setter
// ===========================================================
// ===========================================================
// Methods for/from SuperClass/Interfaces
// ===========================================================
@Override
public EngineOptions onCreateEngineOptions() {
// カメラクラスに表示サイズを指定
Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);
// ゲームのエンジンを初期化
EngineOptions eo = new EngineOptions(
true,
ScreenOrientation.PORTRAIT_FIXED,
new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT),
camera);
return eo;
}
@Override
protected void onCreateResources() {
// 標準フォントを用意
mFont = FontFactory.create(this.getFontManager(), this.getTextureManager(), 256, 256, Typeface.create(Typeface.DEFAULT, Typeface.BOLD), 32);
mFont.load();
}
@Override
protected Scene onCreateScene() {
// シーンを作る
final Scene scene = new Scene();
// 背景色を水色に設定(RGB)
scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));
// 文字を表示
final Text text = new Text( 10, 10, this.mFont, "Hello World !", new TextOptions(HorizontalAlign.RIGHT), getVertexBufferObjectManager());
scene.attachChild(text);
//TMX mapの読み込み
try{
final TMXLoader tmxLoader = new TMXLoader(this.getAssets(), this.mEngine.getTextureManager(), TextureOptions.BILINEAR_PREMULTIPLYALPHA, this.getVertexBufferObjectManager(), new ITMXTilePropertiesListener() {
@Override
public void onTMXTileWithPropertiesCreated(final TMXTiledMap pTMXTiledMap, final TMXLayer pTMXLayer, final TMXTile pTMXTile, final TMXProperties<TMXTileProperty> pTMXTileProperties) {
}
});
this.mTMXTiledMap = tmxLoader.loadFromAsset("tmx/map01.tmx");
}catch (final TMXLoadException tmxle) {
Debug.e(tmxle);
}
// レイヤーをSceneに結びつける
for (int i = 0; i < this.mTMXTiledMap.getTMXLayers().size(); i++){
TMXLayer layer = this.mTMXTiledMap.getTMXLayers().get(i);
scene.attachChild(layer);
}
return scene;
}
@Override
protected int getLayoutID() {
// ActivityのレイアウトのIDを返す
return R.layout.activity_main;
}
@Override
protected int getRenderSurfaceViewID() {
// SceneがセットされるViewのIDを返す
return R.id.renderview;
}
}












このコメントは投稿者によって削除されました。
返信削除