Возможно, вы не захотите избегать темы для этой задачи. Вы можете создать класс, который расширяет Sprite
и написать некоторый код, который постепенно изменяет масштаб Sprite
в методе draw
.
public class MySprite extends Sprite {
private boolean doScale;
private float scaleBy;
private float scaleTime;
private float timeElapsed;
private float progress;
private float lastProgress;
public MySprite(Texture texture) {
super(texture);
}
public void scaleTo(float scaleTo, float time){
scaleBy(scaleTo - getScaleX(),time);
}
public void scaleBy(float scaleBy, float time){
this.scaleBy = scaleBy;
doScale = true;
scaleTime = time;
timeElapsed = 0;
lastProgress = 0;
setOriginCenter();
}
@Override
public void draw(Batch batch) {
if(doScale){
timeElapsed += Gdx.graphics.getDeltaTime();
progress = timeElapsed/scaleTime;
progress = progress > 1?1: progress;
float progressDelta = progress - lastProgress;
float scaleBy = this.scaleBy *progressDelta;
setScale(getScaleX()+scaleBy,getScaleY()+scaleBy);
lastProgress = progress;
if(progress == 1)
doScale = false;
}
super.draw(batch);
}
}
Затем используйте метод scaleTo()
или scaleBy()
в MySprite
...
@Override
public void create () {
...
...
...
mySprite = new MySprite(texture);
mySprite.scaleTo(2,1);//Scale to 200% in 1 seconds
}
Хотя libGdx уже предоставляет Actions
для этого, вы можете рассмотреть возможность использования Actor
@Override
public void create () {
...
...
...
imageActor = new Image(texture);
imageActor.addAction(Actions.scaleTo(2,2,1));//Scale to 200% in 1 seconds
}