LibGDX - Rotating sprites from their corners.

Started by
3 comments, last by Dave Hunt 8 years, 3 months ago
I've been struggling with a problem regarding rotations and relative positions between sprites (in this case, the sprites are just lines) - a bit off-topic, but should i be using the ShapeRenderer class to do this, though?
Anyway, it might be quite simple but i can't seem to figure it out properly. Heres a picture of the situation: https://gyazo.com/78988e07991fedc778eaeb70f8a04d8e
Now, after trying a bunch of different approaches, this piece of code is the one i'm testing right now:


`   public class TestState extends AbstractGameState {

    private static final String LINE = "lineEffect.png";

    private Sprite[] sprites;

    public TestState(GameStateManager gsm) {
        super(gsm);

        sprites = new Sprite[2];
        for (int i = 0; i < 2; i++) {
            sprites[i] = new Sprite(new Texture(LINE));
            // both lines starting at the same X and Y
            sprites[i].setPosition(20, 50);
            // both lines have the same size
            sprites[i].setSize(100, 2);
            // guess i might be messing up here
            sprites[i].setOrigin(sprites[i].getX(), sprites[i].getY());
        }

        // for testing purposes
        sprites[0].setRotation(-20);
        sprites[1].setRotation(45);
    }

    @Override
    public void render(SpriteBatch batch) {
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        for (Sprite sprite : sprites)
            sprite.draw(batch);
        batch.end();
    }`

As it's my first ever post here i'm not sure if i'm posting correctly / in the right place so please tell me if that's the case.
So please, any help on this would be appreciated, thanks in advance.
Advertisement

The origin is relative to the sprite's upper-left corner. So, if you want rotations around the upper-left corner, the origin should be 0,0. If you want rotations around the sprite's center, you would use width/2,height/2 (or use setOriginCenter). Note that the origin is also used as an offset to the sprite's position. Essentially, the origin is subtracted from the position when drawing.

The origin is relative to the sprite's upper-left corner. So, if you want rotations around the upper-left corner, the origin should be 0,0. If you want rotations around the sprite's center, you would use width/2,height/2 (or use setOriginCenter). Note that the origin is also used as an offset to the sprite's position. Essentially, the origin is subtracted from the position when drawing.

Fixed by seting the origin to (0, 0), thank you so much!

The origin is relative to the sprite's upper-left corner. So, if you want rotations around the upper-left corner, the origin should be 0,0. If you want rotations around the sprite's center, you would use width/2,height/2 (or use setOriginCenter). Note that the origin is also used as an offset to the sprite's position. Essentially, the origin is subtracted from the position when drawing.


The origin is relative to bottom left in libgdx.


The origin is relative to bottom left in libgdx.

Oops! You are absolutely correct.

This topic is closed to new replies.

Advertisement