英フォーラムのこちらで発見
http://www.andengine.org/forums/gles2/setglobaltileid-t6736.html#p34462
以下上記記事の適当な訳
質問:グローバルIDを.setGlobalTileID(mTMXTiledMAp,31)といった感じで31番のタイルIDに変更します。そうすると、確かにタイルIDは変更されている。例えば変更前が草タイルで、31番タイルIDが石タイルなら、変更後にプレイヤーはこのタイルの上を歩けなくなる。ここまではオッケーです。
しかし、タイルの見た目は変わりません。どうすれば新しいタイルIDのテクスチャを参照してくれますか?
質問:グローバル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のライブラリ自体を修正することで、解決するという人もいるようですが、
私はとりあえずこの方法で満足です。
0 件のコメント:
コメントを投稿