Переместить форму в место, где мой палец касается - PullRequest
0 голосов
/ 13 октября 2019
@Override
public void create()
{

    batch = new SpriteBatch();

    shape = new ShapeRenderer();
    velocity = new Vector2(100, 0);
    position = new Rectangle(0, 5, 100, 100);

    font = new BitmapFont();
    font.setColor(Color.BLACK);
    font.getData().scale(3f);

    camera = new OrthographicCamera();
    confCamera();

}

@Override
public void render()
{        

       if(Gdx.input.isTouched())
        position.x = Gdx.input.getX() - position.width/2;
        position.y = (Gdx.input.getY()  - position.height/2);

    shape.begin(ShapeRenderer.ShapeType.Filled);

    shape.setColor(Color.BLACK);
    shape.rect(position.x, position.y, position.width, position.height);

    shape.end();
}

Это простой код, но я не разбираюсь в оси Y, моя фигура движется как зеркало. Если я коснусь сверху, моя форма переместится вниз. Если я коснусь снизу, моя форма переместится вверх. Как это исправить?

1 Ответ

0 голосов
/ 14 октября 2019

LibGDX (по умолчанию) для рендеринга использует систему координат, где 0 находится в нижней части экрана, и чем больше вы поднимаетесь, координата Y увеличивается.

Также, когда вы читаете входные координаты (касания, перемещения .. .) вы получаете экранные координаты, но когда вы визуализируете свою графику, вы используете «мировые» координаты. Они находятся в 2 разных системах координат, поэтому для преобразования из экрана в мир вам нужно использовать вызов camera.unproject (). Должно быть как:

Vector3 touchPos = new Vector3(Gdx.input.getX(), Gdx.input.getY(), 0);
camera.unproject(touchPos);

, а затем используйте touchPos.x и touchPos.y.

Аналогичный вопрос задается здесь, чтобы вы могли найти больше ответов там:

Правильное использование unProject в Java. Libgdx

...