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);