I want to rotate the ring image constantly in anticlockwise direction here is my code
JavaScript
x
public class SpriteSheet extends ApplicationAdapter {
Stage stage;
@Override
public void create () {
stage=new Stage(new ScreenViewport());
Group group=new Group();
Image background =new Image(new Texture(Gdx.files.internal("background.png")));
Image button=new Image(new Texture(Gdx.files.internal("btn.png")));
Image ring=new Image(new Texture(Gdx.files.internal("ring2.png")));
background.setName("background");
button.setName("button");
ring.setName("ring");
group.addActor(background);
group.addActor(button);
group.addActor(ring);
stage.addActor(group);
background.setPosition(Gdx.graphics.getWidth()/2-background.getWidth()/2,Gdx.graphics.getHeight()/2-background.getHeight()/2);
button.setPosition(Gdx.graphics.getWidth()/2-button.getWidth()/2,Gdx.graphics.getHeight()/2-button.getHeight()/2);
ring.setPosition(255,105);
ring.setOrigin(255f,105f);
ring.rotateBy(2f); // I need continuous rotation here
}
@Override
public void render () {
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
stage.act(Gdx.graphics.getDeltaTime());
stage.draw();
}
}
Advertisement
Answer
I guess the Actions
are what you are looking for.
An Action
can be added to Actor
s (and subclasses) and they will be performed inside the act(delta)
method, of the Actor
.
In your case you could use the Actions.rotateBy(float rotationAmount, float duration)
and let it repeat forever by using Actions.repeat(RepeatAction.FOREVER, rotateAction)
.
So your final code should look like this:
JavaScript
ring.addAction(Actions.repeat(RepeatAction.FOREVER, Actions.rotateBy(rotation, duration)));
Where rotation
is the rotation amount (i guess in degrees, but i am not sure) and duration
is the time it should take to rotate by the given amount (given in seconds).