0

我认为在我的动画中加载许多纹理会导致我的游戏略有滞后,我希望我的数组纹理在 TextureAtlas 中。下面的代码是我的动画代码,它还将获取动画中的纹理帧索引,并在显示纹理索引时执行任务....,我已经有一个名为 shot.pack 的.pack 文件,用于纹理图集,但我不知道如何应用它并使它成为这样。我希望有人能帮帮忙

     Texture[] shot;
     //At CONSTRUCTOR
    shot = new Texture[21];
    for(int i=0; i <21; i++){
        if(i == 19 || i==20 ){
            shot[i]=new Texture("s18.png");
        }
        else {
            shot[i] = new Texture("s" + Integer.toString(i) + ".png");
        }

    }
        //animation
    animation = new Animation(1/19f,shot);


   //@render METHOD
   sb.draw((Texture) animation.getKeyFrame(timePassed, false), ShootingTreys.WIDTH * 0.03f, ShootingTreys.HEIGHT * 0.03f, (ShootingTreys.WIDTH * 1 / 6), (ShootingTreys.HEIGHT / 2) + (ShootingTreys.HEIGHT * 0.13f));

        if (animation.getKeyFrameIndex(timePassed) == 20) {
            isShotDelay = true;
            shotDelay += Gdx.graphics.getDeltaTime();

            if (shotDelay >= 0.2f || ball.getBall().getY() < ShootingTreys.HEIGHT * 0.2f) {
                touch = false;
                timePassed = 0;
                shotDelay = 0;
                isShotDelay = true;
                //for missed ball
                colide = false;
            }
        }
4

1 回答 1

0

将所有动画帧保存在一个单独的 .pack 文件中

    TextureAtlas aniAtlas=new TextureAtlas("ani.pack");
    Array<TextureAtlas.AtlasRegion> animationFrame=aniAtlas.getRegions();
    float duration=.4f;
    Animation<TextureRegion> animation=new Animation<TextureRegion>(duration,animationFrame);

一个 .pack 中的多个动画文件保留了类似文件类型的索引概念,例如。
鸟_0.png,鸟_1.png,.....
猫_0.png,猫_1.png,......

    TextureAtlas multiAniAtlas=new TextureAtlas("ani.pack");
    Array<TextureAtlas.AtlasRegion> birdFrames=multiAniAtlas.findRegions("bird");
    float duration1=.55f;
    Animation<TextureRegion> birdAnimation=new Animation<TextureRegion>(duration1,birdFrames);

使用可以使用 AssetManger 并以这种方式加载您的 TextureAtlas:

    AssetManager assetManager=new AssetManager();
    assetManager.setLoader(TextureAtlas.class, new TextureAtlasLoader(new InternalFileHandleResolver()));
    assetManager.load("ani.pack", TextureAtlas.class);
    assetManager.finishLoading();

    TextureAtlas atlas=assetManager.get("ani.pack");
于 2017-03-09T05:08:37.740 回答