libgdx - 找到与原点不同的坐标?

时间:2015-01-15 09:39:54

标签: android libgdx coordinates sprite

我希望有人建议我在libgdx中找到精灵上一个点的坐标。

enter image description here

从图像中可以看出,我已经在红点上设置了带有原点的精灵,我无法改变它。 我会留下红点作为源,并在同一个精灵上找到绿色的坐标。

感谢您的帮助。

修改

@Override
public void create () {

    img = new Texture("rocket.png");
    font = new BitmapFont();
    font.setColor(Color.BLUE);

    MyInputProcessor inputProcessor = new MyInputProcessor();
    Gdx.input.setInputProcessor(inputProcessor);

    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    sprite = new Sprite(img);

    spacesprite = new Sprite(new Texture(Gdx.files.internal("space.jpg")));
    spacesprite.setPosition(0,0);
    spacesprite.setSize(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());

    point = new Sprite(new Texture(Gdx.files.internal("point.png")));


    batch = new SpriteBatch();

}

@Override
public void render () {

    sprite.setPosition(Gdx.graphics.getWidth() / 2 - sprite.getWidth()/2, Gdx.graphics.getHeight() / 2 - sprite.getHeight()/2);
    sprite.setOrigin(sprite.getWidth()/2, sprite.getHeight()/2);

    point.setPosition(sprite.getX() + sprite.getWidth()/2 - point.getWidth()/2, sprite.getY() + sprite.getHeight()/2);
    point.setOrigin(point.getWidth()/2, 0);

    if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
        //sprite.setPosition(Gdx.input.getX() - sprite.getWidth()/2, Gdx.graphics.getHeight() - Gdx.input.getY() - sprite.getHeight()/2);
        if(Gdx.input.getX() < Gdx.graphics.getWidth() / 2)
        {
            //System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation++);
            point.setRotation(rotation++);
            System.out.println("Sprite: X" + sprite.getX() + " - Y:" + sprite.getY());
        }
        else
        {
            //System.out.println("x: " + Gdx.input.getX() + " - y: " + Gdx.input.getY());
            sprite.setRotation(rotation--);
            point.setRotation(rotation--);
            System.out.println("Sprite: X" + sprite.getX() + " - Y:" + sprite.getY());
        }
    }

    batch.begin();
    spacesprite.draw(batch);
    sprite.draw(batch);
    point.draw(batch);
    batch.end();
}
有人可以调整代码,当我轮换时我会得到这个位置,但他们对我的实现不安全。

2 个答案:

答案 0 :(得分:0)

如果您正在寻找矩形精灵的中间点,请尝试以下方法:

float x = obj.getOriginX() + obj.getHeight();
float y = obj.getOriginY() + obj.getWidth() / 2;

答案 1 :(得分:0)

使用Gonio,矩阵或四元数来计算旋转坐标。

对于一些简单的计算,我使用gonio,例如:

float angle_rad = sprite.getRotation() / 180.0f * PI;

float rotated_x = Math.sin(angle_rad) * y + Math.cos(angle_rad) * x;
float rotated_y = Math.sin(angle_rad) * x + Math.cos(angle_rad) * y;

如果你不得不经常查看矩阵或四元数,那么矩阵会更容易:http://en.wikipedia.org/wiki/Rotation_matrix