Java 同时以世界单位指定动画精灵的大小

Java 同时以世界单位指定动画精灵的大小,java,libgdx,game-engine,Java,Libgdx,Game Engine,如果我使用精灵,我可以根据我的游戏世界单位设置精灵的大小和位置: AtlasRegion region = textureAtlas.findRegion("0001"); sprite = new Sprite(region); sprite.setPosition(11.5f, 5f); sprite.setSize(7f, 7f * region.getRegionHeight() / region.getRegionWidth()); 我如何通过动画来实

如果我使用精灵,我可以根据我的游戏世界单位设置精灵的大小和位置:

    AtlasRegion region = textureAtlas.findRegion("0001");
    sprite = new Sprite(region);
    sprite.setPosition(11.5f, 5f);
    sprite.setSize(7f, 7f * region.getRegionHeight() / region.getRegionWidth());
我如何通过动画来实现这一点。如何设置每个关键帧精灵的大小

textureAtlas = new TextureAtlas(Gdx.files.internal("data/bycicle.atlas"));

TextureRegion[] rotateUpFrames = new TextureRegion[4];

// Create an array of TextureRegions
rotateUpFrames[0] = (textureAtlas.findRegion("0001"));
rotateUpFrames[1] = (textureAtlas.findRegion("0002"));
rotateUpFrames[2] = (textureAtlas.findRegion("0003"));
rotateUpFrames[3] = (textureAtlas.findRegion("0004"));

rotateUpAnimation = new Animation(0.1f,rotateUpFrames);

我设置了一个动画子类,这样每当精灵用新区域更新时,我就可以使用方便的方法应用缩放。例如:

public class AnimationPlus extends Animation {

    float scale;

    public AnimationPlus (float frameDuration, 
            Array<? extends TextureRegion> keyFrames, PlayMode playMode, float scale) 
    {
        super(frameDuration, keyFrames, playMode);
        this.scale = scale;
    }

    public void applyKeyFrameToSprite (float stateTime, Sprite sprite)
    {
        TextureRegion region = getKeyFrame(stateTime);
        sprite.setSize(scale, 
            scale * region.getRegionHeight() / region.getRegionWidth());
    }
}
顺便说一下,如果使用下划线数字后缀命名动画帧,如bike_0、bike_1、bike_2等,则可以方便地获得如下区域数组:

Array<TextureRegion> bikeRegions = textureAtlas.findRegions("bike");
AnimationPlus animation = new AnimationPlus(0.1f, bikeRegions, PlayMode.LOOP, 7f);