nicolasgramlich / AndEngine

Free Android 2D OpenGL Game Engine
http://www.andengine.org
Apache License 2.0
3.17k stars 1.35k forks source link

Sprite.markTextureRegionChanged() method added #210

Open flomin opened 11 years ago

flomin commented 11 years ago

This method can be used after modifications to a Sprite texture to update the Sprite with a call to onUpdateTextureCoordinates().

E.g. with this method to truncate the Sprite texture:

public static void truncateSpriteTextureRegion(final Sprite pSprite, final ITextureRegion pOriginalTextureRegion, final float pLeftX, final float pRightX, final float pTopY, final float pBottomY, final VertexBufferObjectManager pVertexBufferObjectManager) {
    final float lTruncX, lTruncY, lTruncWidth, lTruncHeight;
    if (pOriginalTextureRegion.isRotated()) {
        lTruncHeight = pOriginalTextureRegion.getWidth() - pLeftX - pRightX;
        lTruncWidth = pOriginalTextureRegion.getHeight() - pTopY - pBottomY;
        lTruncX = pOriginalTextureRegion.getTextureX() + pBottomY;
        lTruncY = pOriginalTextureRegion.getTextureY() + pLeftX;
    } else {
        lTruncHeight = pOriginalTextureRegion.getHeight() - pTopY - pBottomY;
        lTruncWidth = pOriginalTextureRegion.getWidth() - pLeftX - pRightX;
        lTruncX = pOriginalTextureRegion.getTextureX() + pLeftX;
        lTruncY = pOriginalTextureRegion.getTextureY() + pTopY;
    }
    pSprite.getTextureRegion().set(lTruncX, lTruncY, lTruncWidth, lTruncHeight);
    pSprite.markTextureRegionChanged();
    if (pOriginalTextureRegion.isRotated()) {
        pSprite.setWidth(lTruncHeight);
        pSprite.setHeight(lTruncWidth);
    } else {
        pSprite.setWidth(lTruncWidth);
        pSprite.setHeight(lTruncHeight);
    }
}