java - studio - libgdx ubuntu
ConfusiĆ³n de coordinaciĆ³n de LibGDX touch (3)
Necesitarás usar una cámara para hacer esto. Si no estás usando una cámara, te recomiendo que agregues una, ya que hace las cosas mucho más fáciles. Simplemente llame a camera.setToOrtho(true)
, que cambiará el sistema de coordenadas de LibGDX al que desee, (0,0) en la parte superior izquierda.
Para hacer esto con un cierto ancho y altura de ventana diferente a la que obtiene de Gdx.graphics.getWidth / Height (), puede llamar a camera.setToOrtho(true, viewportWidth, viewportHeight)
.
como entendí, el sistema de coordenadas libGDX se configuró por defecto, por lo que el (0,0) se encuentra en la esquina inferior izquierda, como en la siguiente imagen:
img http://gyazo.com/0e1cd9e1f7c4ee39ea38549ff754ac78.png
¿Es posible hacer que funcione como JFrame, donde la posición predeterminada está en la esquina superior izquierda?
De todos modos, volviendo a mi pregunta real, el sistema de coordenadas táctiles android (o al menos mi teléfono) funciona a pantalla completa (cuando el teléfono está de costado), por lo que la posición predeterminada (0, 0) está en la esquina superior derecha. como en la siguiente imagen:
img2 http://gyazo.com/733fb20b7ce8e842a03a57a7735161ed.png
Entonces, ¿qué sucede cuando simplemente hago esto?
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
System.out.println("X: " + screenX + " Y: " + screenY);
this.instance.player.setLocation(screenX, screenY);
return false;
}
Simplemente obtengo la X, Y de la pantalla táctil (basada en el sistema de coordenadas de pantalla completa de Android) y luego la uso en el sistema de coordenadas libgdx, que es totalmente diferente,
así que si toqué en la esquina superior derecha, mi rectángulo azul aparecerá en la esquina inferior izquierda.
¿Hay alguna manera de hacer que todo funcione en la esquina superior izquierda, como en la PC?
No sé cómo configurarlo en la esquina superior izquierda, pero una cosa que podría hacer es convertir la coordenada de entrada a la coordenada libgdx. Espero que pueda ayudarte o ayudar a alguien más:
int Screen_height = Gdx.graphics.getHeight(); // Your screen height
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
System.out.println("X: " + screenX + " Y: " + (Screen_height - screenY));
this.instance.player.setLocation(screenX, (Screen_height - screenY));
return false;
}
Necesita utilizar el project(Vector3 worldCoords)
método project(Vector3 worldCoords)
en la clase com.badlogic.gdx.graphics.Camera
.
private Camera camera;
............
@Override
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
Cree una instancia del vector e inicialícela con las coordenadas del controlador de eventos de entrada.
Vector3 worldCoors = new Vector3(screenX, screenY, 0);
Proyecta los worldCoors dados en el espacio mundial para las coordenadas de la pantalla.
camera.project(worldCoors);
Usa las coordenadas proyectadas.
world.hitPoint((int) worldCoors.x, (int) worldCoors.y);
OnTouch();
return true;
}