Paso 3: La clase de cámara
Ahora vamos a tomar otro desvío y configurar la clase de cámara. La clase de cámara mantiene un seguimiento de donde el jugador se encuentra en el mapa 2D y también se encarga de actualizar la posición del jugador. Para ello la clase implementará KeyListener, por lo que tendrá que importar KeyEvent KeyListener.
Muchas variables son necesarias para realizar un seguimiento de posición de la cámara y lo que puede ver. Debido a esto la primera parte de la clase tiene este aspecto:
xPos y yPos son la ubicación del jugador en el mapa 2D creado en la clase del juego. xDir y yDir son el x y y componentes de un vector que apunta en la dirección el jugador se enfrenta. xPlane y yPlane también son el x y y componentes de un vector. Siempre es perpendicular al vector dirección el vector definido por xPlane y yPlane, y puntos para el borde más alejado del campo de visión de la cámara a un lado. El borde más alejado en el otro lado es sólo el vector del plano negativo. La combinación del vector de dirección y el plano define lo que es en el campo de visión. Los valores booleanos se utilizan para realizar un seguimiento de qué claves son ser presionadas por el usuario para que el usuario puede mover la cámara. MOVE_SPEED y ROTATION_SPEED determinan qué tan rápido la cámara se mueve y gira mientras el usuario está presionando la tecla correspondiente.
El siguiente es el constructor. El constructor toma en valores que indican la clase donde se encuentra la cámara y lo que puede ver y asigna a la variable correspondiente (xPos, yPos...).
Un objeto de la cámara será necesaria en el programa final, así que vamos adelante y agregar uno. En la clase del juego con todas las otras declaraciones de variable, agregue en
y en el constructor en
Esta cámara funciona con el mapa que estoy utilizando, si está utilizando un mapa o si quiere iniciar en una ubicación diferente ajusta los valores de xPos y yPos (4 y 6 en mi ejemplo). Uso da.66 lo que siento es un buen campo de visión, pero usted puede ajustar el valor para obtener un campo visual diferente.
Ahora que la cámara de clase tiene un constructor podemos empezar añadiendo métodos para rastrear las entradas del usuario y actualización de la posición/orientación de la cámara. Dado que la clase de cámara implementa KeyboardListener debe tener todos los métodos de lo implementado. Eclipse debe automáticamente le pedirá que agregue estos métodos. El método keyTyped puede dejar en blanco, pero los otros dos métodos que se utilizarán. keyPressed establecerá los valores booleanos true cuando se presionen sus teclas correspondientes, y keyReleased cambiarán a false cuando se liberan las claves. Los métodos de este aspecto:
y
Ahora que la clase de cámara es mantener la pista de la cual se presionan las teclas podemos empezar a actualizar la posición del jugador. Para ello vamos a utilizar un método de actualización que se llama en el método run de la clase juego. Mientras estamos en ello a seguir adelante y añadir una detección de colisiones al método update pasando el mapa a él cuando se le llama en la clase del juego. El método update se ve así:
Las partes del método de control hacia adelante y hacia atrás movimiento trabajan agregando xDir y yDir xPos y yPos, respectivamente. Antes de que este movimiento suceda el programa comprueba si el movimiento será poner la cámara dentro de una pared y no seguir adelante con el movimiento si quiere. Para la rotación del vector de la dirección y el vector del plano se multiplican por la matriz de rotación, que es:
para conseguir sus nuevos valores. Con el método de actualización completado ahora podemos llamarlo desde la clase juego. En el método run de la clase juego añadir la siguiente línea de código donde se muestra aquí
Ahora que eso se hace por fin podemos pasar a la clase final y calcular la pantalla!