2016-02-18 2 views
3

Я создаю Android-игру a2D с LibGDX, и я использую орфографическую камеру для перемещения по всему миру.LibGDX: Перемещение камеры с Touch

Для перемещения камеры плеер должен касаться и перетаскивать экран. Поэтому, если вы касаетесь экрана и перетаскиваете его вправо, камера должна двигаться влево. Таким образом, это должно быть подобно перемещению части увеличенного изображения в галерее. Надеюсь, вы следите за мной.

Это код:

public class CameraTestMain extends ApplicationAdapter { 

    SpriteBatch batch; 
    Texture img; 
    OrthographicCamera camera; 

    @Override 
    public void create() { 
     batch = new SpriteBatch(); 
     img = new Texture("badlogic.jpg"); 
     camera = new OrthographicCamera(1280, 720); 
     camera.update(); 
    } 

    @Override 
    public void render() { 
     Gdx.gl.glClearColor(1, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     handleInput(); 
     camera.update(); 

     batch.setProjectionMatrix(camera.combined); 

     batch.begin(); 
     batch.draw(img, 0, 0); 
     batch.end(); 
    } 

    public void handleInput() { 

     // That is my problem 

    } 

} 

Я не знаю, что писать в методе handleInput(). Я знаю, что есть интерфейс InputProcessor со способом touchDragged(int x, int y, int pointer), где вы можете обрабатывать Touch Drag, но я понятия не имею, как его использовать.

Спасибо за ваши идеи и вашу помощь.

ответ

1

InputProcessor - это интерфейс, который позволяет вам определить, что делать, когда выполняется какое-либо действие (например, касание экрана).

Так что первая вещь, чтобы реализовать интерфейс в классе:

public class CameraTestMain extends ApplicationAdapter implements InputProcessor 

затем в создать() метод установить класс как InputProcessor по телефону:

//create() method 
    Gdx.input.setInputProcessor(this); 

Второй заключается в реализации touchDragged. Обратите внимание на то, что это х и у параметры просто относительно последней позиции указателя так, чтобы получить фактическое положение указателя вы должны сохранить его в какой-то глобальной переменной в приземление метода. Конечно, вам не нужна абсолютная позиция указателя, так как вы можете просто изменить положение камеры, а не устанавливать это.

//touchDragged method 
    public boolean touchDragged(int screenX, int screenY, int pointer) { 
     camera.position.set(camera.position.x + screenX, camera.position.y + screenY); 

Не забудьте позвонить camera.update() в начале визуализации() метод!

Для получения более подробной информации посмотрите at this tutorial

+0

@ erik4thewinners Примите этот ответ, если он поможет вам и рассмотрит вопрос о его продолжении, поскольку я считаю, что это хороший ответ. – Madmenyo

+0

Параметры screenX и screenY являются абсолютными значениями. – Winter

+2

Этот ответ неправильный из-за того, что 'camera.position.set (камера.position.x + screenX, камера.position.y + screenY); 'отправляет камеру, летящую с экранаX и screenY, возвращаясь, где мышь находится на экране ... Вместо screenX нужно вставить какое-то« изменение в X », а также для Y .. , – Sierox

3

Этот вопрос старый, но, как сказал Sierox, принятый ответ пошлет камеру отлета, так вот еще одно решение

Gdx.input.getDeltaX() возвращает разницу между текущее местоположение указателя и последнее местоположение указателя на оси X.

Gdx.input.getDeltaY() вернет разницу между текущим местоположением указателя и последним местоположением указателя по оси Y.

@Override 
public boolean touchDragged(int screenX, int screenY, int pointer) { 
    float x = Gdx.input.getDeltaX(); 
    float y = Gdx.input.getDeltaY(); 

    camera.translate(-x,y); 
    return true; 
} 
Смежные вопросы