Java libgdx mover la cámara de perspectiva

Hola comunidad Stackoverflow 🙂 He buscado mucho, pero no pude encontrar una solución hasta ahora, tal vez alguien aquí me puede ayudar 🙂

Estoy creando un juego en 3D, pero no sé cómo traducir la cámara de acuerdo a mis dedos. Estoy creando un mapa (x = -30 a +30; y = -30 a 30; z = -1 a 1) donde cada coordenada se utiliza para un modelo utilizando archivos .g3db de mis activos y se implementa usando el modelo traducción. Esto funciona hasta ahora, el mapa se ve bien y se ve en un ángulo del 67%. El mapa es tan grande que no se puede ver en la cámara a la vez (no, no quiero alejar). Cada vez que estoy tocando la pantalla de mi teléfono Android es simplemente girar alrededor del centro, pero en su lugar quiero que el gamemap para permanecer en el lugar desde mi punto de vista y en su lugar cambiar la posición de la cámara en perspectiva en el eje xyy. No hay ningún objeto de juego que se puede utilizar para el seguimiento de posición, todo debe estar en función de mis acciones dedo. De esta forma quiero pasar a la pantalla visible a cada dirección xey (piense en ella visualmente como una cámara 2D moviéndose hacia arriba, hacia abajo y hacia los lados delante de una imagen). ¿Me puedes ayudar?

Este es mi código hasta ahora:

public class MyGdxGame extends ApplicationAdapter implements ApplicationListener{ //define variables ... @Override public void create() { environment = new Environment(); environment.set(new ColorAttribute(ColorAttribute.AmbientLight, 0.4f, 0.4f, 0.4f, 1f)); environment.add(new DirectionalLight().set(0.8f, 0.8f, 0.8f, -1f, -0.8f, -0.2f)); modelBatch = new ModelBatch(); cam = new PerspectiveCamera(67, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); cam.position.set(10f, 10f, 10f); cam.lookAt(0,0,0); cam.near = 1f; cam.far = 300f; cam.update(); assets = new AssetManager(); //load assets ... loading = true; camController = new CameraInputController(cam); camController.forwardTarget = true; Gdx.input.setInputProcessor(camController); } private void doneLoading() { //load models and add them to instances loading = false } @Override public void render() { if (loading && assets.update()) doneLoading(); camController.update(); Gdx.gl.glViewport(0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight()); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT); modelBatch.begin(cam); modelBatch.render(instances, environment); modelBatch.end(); } 

Estoy usando la suite de herramientas Spring 3.5.1 como IDE y libgdx 1.0.1

Saludos cordiales Christian

No use CameraInputController , sino que implementa InputProcessor y utiliza esa clase en la llamada a Gdx.input.setInputProcessor .

Por ejemplo:

 public class MyGdxGame extends ApplicationAdapter implements InputProcessor { 

Y en el método create:

 Gdx.input.setInputProcessor(this); 

Tendrás que implementar todos los métodos mostrados en este enlace , excepto el método touchDown y touchDragged que requiere código adicional:

 private int dragX, dragY; @Override public boolean touchDown (int x, int y, int pointer, int button) { dragX = x; dragY = y; return true; } @Override public boolean touchDragged (int x, int y, int pointer) { float dX = (float)(x-dragX)/(float)Gdx.graphics.getWidth(); float dY = (float)(dragY-y)/(float)Gdx.graphics.getHeight(); dragX = x; dragY = y; cam.position.add(dX * 10f, dY * 10f, 0f); cam.update(); return true; } 

Aquí los valores dX y dY son la cantidad que el usuario ha arrastrado en la pantalla dentro del rango entre -1f y +1f . Por ejemplo, para dX un valor de 0.5f significa que el usuario arrastró la mitad del tamaño de la pantalla a la derecha. Tenga en cuenta que estos son valores delta desde la última vez que se llamó al método. Es probable que el método se llame muchas veces por operación de arrastre. Por lo tanto, los dX y dY serán valores pequeños.

La llamada a cam.position.add(...) moverá realmente la cámara y la llamada a cam.update(); Volverá a calcular los valores necesarios para la representación. He utilizado un multiplicador de 10f para la traducción X e Y de la cámara. Esto significa que si el usuario arrastra completamente desde el borde izquierdo hasta el borde derecho de la pantalla, la cámara moverá un total de 10 unidades hacia la derecha. Puede ajustar el valor según sea necesario.

Tenga en cuenta que esto mueve la cámara en el plano XY. Si necesita desplazarse por ejemplo en el plano XZ, debe ajustar la llamada cam.position.add(...) consecuencia. Además, esto no cambia la dirección de la cámara. Si desea mover la cámara, mientras mira a la misma ubicación, tendrá que agregar cam.lookAt(0,0,0); Justo antes de cam.update(); .

  • Libgdx: la aplicación android no encuentra la clase de juego principal
  • Programación de juegos para Android - Heap issues
  • Libgdx en el escritorio, cómo manejar la eliminación cuando la ventana está cerrada
  • Libgdx Creación de controles en pantalla
  • LibGDX leer archivo XML
  • La imagen no es un poder de 2?
  • Acciones de los actores en libgdx
  • Gráficos Android gran consumo de memoria montón? - LibGDX
  • ¿Es AndEngine un motor de juego?
  • Uso de getSpectrum () en la librería Libgdx
  • OpenGL 2.0 o superior con la extensión FBO es obligatorio LibGDX Error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.