2013-04-06 1 views
2

나는 게임에서 타일을 변경하는 데 this technique을 사용했지만 많은 타일을 한 번에 변경하면 성능에 큰 손실이 있음을 눈치 챘습니다. 이 기술을 사용하여 TMX 맵에서 타일을 애니메이션으로 만듭니다. 다른 누군가가 tmx 타일을 변경하기 위해이 방법을 사용하여 성능 문제를 발견했는지 궁금합니다. TMX 타일을 변경하는보다 효율적인 방법이 있습니까?andengine의 tmx 타일 변경

성능 손실을 해결하기 위해 내가 생각할 수있는 유일한 대안은 TMX 레이어에 애니메이션 스프라이트를 첨부하는 것이지만 이상적인 솔루션처럼 보이지 않습니다.

모든 조언을 주시면 감사하겠습니다.

mTestTile.setGlobalTileID(mTMXTiledMap, mGloabalIndex); 

//After changing the global ID do this  
final int TileHeight = mTMXTiledMap.getTileHeight(); 
final int TileWidth = mTMXTiledMap.getTileWidth();   
//See TMXLayer Class line 308 (getSpriteBatchIndex) 
lTMXLayer.setIndex(mTestTile.getTileRow() * mTMXTiledMap.getTileColumns() + mTestTile.getTileColumn()); 
lTMXLayer.drawWithoutChecks(mTestTile.getTextureRegion(), mTestTile.getTileX(), mTestTile.getTileY(), lTileWidth, lTileHeight, Color.WHITE_ABGR_PACKED_FLOAT);  
mTMXTiledMap.mTestTMXLayer.submit();[/syntax] 

참고 : 아래

내가 언급 한 방법이다 나는 당신이 사용할 수 있는지 확실하지 않다 GLES2 Anchor_Center 지점

답변

2

를 사용하고,하지만 난 비슷한 필요합니다. 내 TMX 맵에는 두 개의 프레임 (켜짐/꺼짐)을 갖길 원하는 객체가 거의 없습니다. 맵 레이어를 사용하는 대신, 나는 이것을 위해 객체 레이어를 사용했다. 나는 TMXTileset 클래스에이 코드를 추가했습니다 :

public ITiledTextureRegion getTiledTextureRegionFromGlobalTileID(final int pGlobalTileID, final int pTiles) { 
    ITextureRegion[] regions = new ITextureRegion[pTiles]; 
    for (int i = 0; i < pTiles; i++) { 
     regions[i] = getTextureRegionFromGlobalTileID(pGlobalTileID + i); 
    } 

    return new TiledTextureRegion(this.mTexture, regions); 
} 

내가 (타일 편집기를 사용하여) 특별한 목적 층에 모든 온/오프 물건을 올려. 물론, 타일 세트는 켜짐과 꺼짐 프레임이 순서대로 정렬되도록 구성되어야합니다.

그런 다음지도를 만들 때 이러한 개체를 반복하고 바둑판 식으로 배열 된 스프라이트를 만듭니다. 나중에 검색 할 수 있도록 특수 목록에 저장합니다. 그럼 당연히 하나에서 다른 것으로 전환하는 것은 사용하기 쉽습니다. setCurrentTileIndex()

+0

비슷한 일을하게되었습니다. 감사합니다! – eBehbahani