AndEngineのTMXTileを動的に変更する方法

2014年2月24日月曜日

andEngine AndEngineExtention

t f B! P L
ずっとわからなかった、TMXTileのマップタイル変更方法がわかりました

英フォーラムのこちらで発見
http://www.andengine.org/forums/gles2/setglobaltileid-t6736.html#p34462



以下上記記事の適当な訳


質問:グローバルIDを.setGlobalTileID(mTMXTiledMAp,31)といった感じで31番のタイルIDに変更します。そうすると、確かにタイルIDは変更されている。例えば変更前が草タイルで、31番タイルIDが石タイルなら、変更後にプレイヤーはこのタイルの上を歩けなくなる。ここまではオッケーです。
しかし、タイルの見た目は変わりません。どうすれば新しいタイルIDのテクスチャを参照してくれますか?

答え:AndEngineライブラリを変更したくない場合は、以下を試してみて!
mTestTile.setGlobalTileID(mTMXTiledMap, mGloabalIndex);
 
//After changing the global ID do this(グローバルタイルIDを変更した後にこれをやる)
final int TileHeight = mTMXTiledMap.getTileHeight();
final int TileWidth = mTMXTiledMap.getTileWidth();          
//See TMXLayer Class line 308 (getSpriteBatchIndex)
TMXLayer.setIndex(mTestTile.getTileRow() * mTMXTiledMap.getTileColumns() + mTestTile.getTileColumn());
TMXLayer.drawWithoutChecks(mTestTile.getTextureRegion(), mTestTile.getTileX(), mTestTile.getTileY(), TileWidth, TileHeight, Color.WHITE_ABGR_PACKED_FLOAT);    
mTMXTiledMap.mTestTMXLayer.submit();




というわけで、グローバルタイルIDを変更したあとに一手間掛けないといけないようです。

TMXLayer.setIndex
で設定するのはどうやらイテレーターのようなものらしい。ここで更新したいタイルを設定する。
TMXLayer.drawWithoutChecks
はいまいちよくわかっていないが、ここでテクスチャの描画を更新しているらしい。最後に
mTMXTiledMap.mTestTMXLayer.submit()
でレイヤーに変更したことを知らせている

といったところでしょうか?


他にもAndEngineのライブラリ自体を修正することで、解決するという人もいるようですが、
私はとりあえずこの方法で満足です。

Translate

このブログを検索

  • ()
  • ()
もっと見る

QooQ