首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自texturepacker xml的动画精灵

来自texturepacker xml的动画精灵
EN

Stack Overflow用户
提问于 2012-08-21 00:49:38
回答 1查看 2.7K关注 0票数 3

android dev和andengine的新手。尝试使用AndEngineTexturePackerExtension动画子画面,但我不确定如何为动画子画面创建tiledTextureRegion。下面是我从这个论坛的指南和其他帖子中得到的我正在尝试的东西。我正在从texturepacker创建xml、png和java。

代码语言:javascript
复制
private TexturePackTextureRegionLibrary mSpritesheetTexturePackTextureRegionLibrary;
private TexturePack texturePack;

 try
         {
                 TexturePackLoader texturePackLoader = new TexturePackLoader(activity.getTextureManager());
                 texturePack = texturePackLoader.loadFromAsset(activity.getAssets(), "spritesheet.xml");
                 texturePack.loadTexture();
                 mSpritesheetTexturePackTextureRegionLibrary = texturePack.getTexturePackTextureRegionLibrary();
         }
         catch (TexturePackParseException e)
         {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
         }

 TexturePackerTextureRegion textureRegion = mSpritesheetTexturePackTextureRegionLibrary.
                 get(spritesheet.00000_ID);

TiledTextureRegion tiledTextureRegion = TiledTextureRegion.create(texturePack.getTexture(),
                 textureRegion.getSourceX(), textureRegion.getSourceY(),
                 textureRegion.getSourceWidth() , textureRegion.getSourceHeight() ,
                 COLUMNS, ROWS);

AnimatedSprite sprite = new AnimatedSprite((activity.CAMERA_WIDTH - tiledTextureRegion.getWidth()) / 2,
                 (activity.CAMERA_HEIGHT - tiledTextureRegion.getHeight()) / 2,
                 tiledTextureRegion, activity.getVertexBufferObjectManager());

问题是我不明白列和行的值是从哪里来的?精灵工作表本身有不均匀的行和列,因为它包括旋转的精灵等。所以我不知道这些值来自哪里。如果能帮上忙,我将不胜感激

编辑:好的,如果我只是使用纹理打包器中的基本算法,而不是MaxRects算法,我可以让精灵工作表动画工作。但这并没有利用工作表中的所有空间,所以我宁愿使用MaxRects生成的精灵工作表来让它工作。我在xml中看到,它传递了一个用于旋转或不旋转的布尔值,所以信息在那里,以使这项工作,我只是不知道如何。当一些纹理在工作表上旋转时,如何使用texturepackertexture区域来制作动画精灵

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-21 01:04:12

TexturePacker并不知道有多少列和行有你的精灵,即使它们是平铺的还是没有平铺的,它只是把所有的东西都打包到一个精灵表中(例如png文件)。此外,它的目标也不是从独立的Sprite创建TiledSprites。

因此,为了从spritesheet中返回一个TiledSprite (或AnimatedSprite),你必须知道它在被放入spritesheet之前有多少列和行(它可以在某个地方硬编码),因为TexturePacker不会给你这样的信息。

我个人使用的TextureRegionFactory看起来像这样:

代码语言:javascript
复制
public class TexturesFactory {

    public static final String SPRITESHEET_DIR = "gfx/spritesheets/";
    public static final String TEXTURES_DIR = SPRITESHEET_DIR+"textures/";

    private TexturePack mTexturePack;
    private TexturePackTextureRegionLibrary mTextureRegionLibrary;

    /**
     * 
     * @param pEngine
     * @param pContext
     * @param filename
     */
    public void loadSpritesheet(Engine pEngine, Context pContext, String filename) {

        try {
            this.mTexturePack = new TexturePackLoader(
                    pEngine.getTextureManager(), TEXTURES_DIR).loadFromAsset(
                            pContext.getAssets(), filename);

            this.mTextureRegionLibrary = this.mTexturePack.getTexturePackTextureRegionLibrary();
            this.mTexturePack.getTexture().load();

        } catch (TexturePackParseException ex) {
            Log.e("Factory", ex.getMessage(), ex);
        }
    }

    public TextureRegion getRegion(int id) {
        return this.mTextureRegionLibrary.get(id);
    }

    public TiledTextureRegion getTiled(int id, final int rows, final int columns) {

        TexturePackerTextureRegion packedTextureRegion = this.mTextureRegionLibrary.get(id);

        return TiledTextureRegion.create(
                packedTextureRegion.getTexture(), 
                (int) packedTextureRegion.getTextureX(), 
                (int) packedTextureRegion.getTextureY(), 
                (int) packedTextureRegion.getWidth(), 
                (int) packedTextureRegion.getHeight(), 
                columns, 
                rows);
    }
}

xml :关于旋转问题的,它被写在由TexturePacker生成的中,因此您可以通过调用

代码语言:javascript
复制
TexturePackerTextureRegion packedTextureRegion = this.mTextureRegionLibrary.get(id);
packedTextureRegion.isRotated()

然后,您可以使用以下命令根据该值创建tiledTextureRegion:

代码语言:javascript
复制
TiledTextureRegion.create(
                packedTextureRegion.getTexture(), 
                (int) packedTextureRegion.getTextureX(), 
                (int) packedTextureRegion.getTextureY(), 
                (int) packedTextureRegion.getWidth(), 
                (int) packedTextureRegion.getHeight(), 
                columns, 
                rows,
                packedTextureRegion.isRotated());

另外,我希望你明白,TexturePacker并不是用来创建平铺精灵的。您必须使用TexturePacker在之前创建平铺精灵(很好的拟合或行和列)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12041756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档