Paso 4: Cálculo de la pantalla
La clase de pantalla es que la mayoría de los cálculos se realiza para conseguir el programa de trabajo. Para trabajar, la clase tiene las siguientes importaciones:
La clase real comienza así:
El mapa es el mismo mapa creado en la clase del juego. La pantalla utiliza esto para averiguar dónde están las paredes y la distancia el jugador son. Width y height definen el tamaño de la pantalla y siempre deben ser el mismo como el ancho y alto del marco creado en la clase de juego. Texturas es una lista de todas las texturas para que la pantalla puede acceder a los píxeles de las texturas. Después de que las variables se declaran tienen que inicializarse en el constructor como sigue:
Ahora su tiempo a escribir un método de la clase tiene: un método de actualización. El método update Actualiza cómo debe ver la pantalla al usuario en función de su posición en el mapa. El método se llama constantemente y devuelve la matriz actualizada de píxeles a la clase de juego. El método comienza por "limpiar" la pantalla. Esto logra estableciendo todos los pixels en la parte superior la mitad de un color y todos los pixels en la parte inferior a otro.
La parte superior e inferior de la pantalla ser dos diferentes colores también hace parecer que hay un piso y un techo. Después el píxel matriz se borra entonces es el momento de pasar a los cálculos principales. El programa recorre cada barra vertical en la pantalla y lanza un rayo a averiguar qué pared debe estar en la pantalla en la que la barra vertical. El principio del bucle se ve así:
Todo lo que sucede aquí es algunas de las variables que se utilizará por el resto del bucle se calcula. CameraX es la coordenada x de la actual franja vertical en el plano de la cámara, y las variables de rayDir hacen un vector para el rayo. Todas las variables en DistX o DistY son calculados para que el programa sólo comprueba las colisiones en los lugares donde posiblemente podrían ocurrir colisiones. perpWallDist es que la distancia entre el jugador y la primera muralla el rayo choca con. Esto se calcularán más adelante. Después de que tenemos que averiguar algunas de las otras variables basadas en el ya calculamos.
Una vez que se hace es tiempo para averiguar donde el rayo choca con una pared. Para ello el programa pasa a través de un bucle donde comprueba si el rayo ha llegado en contacto con una pared, y si no se mueve a la posible colisión siguiente punto antes de comprobar una vez más.
Ahora que sabemos que donde el rayo golpea una pared podemos empezar a averiguar cómo debe buscar la pared en la banda vertical son actualmente encendido. Para ello primero calcular la distancia a la pared y luego usar esa distancia para averiguar cuánto mide la pared debe aparecer en la franja vertical. Entonces traducir eso altura de inicio y final en cuanto a los píxeles en la pantalla. El código tiene este aspecto:
Después de que se calcula es momento de comenzar a averiguar qué píxeles de la textura de la pared realmente aparecerá para el usuario. Para esto nosotros primero debemos averiguar qué textura se asocia con la pared que acaba de salir y luego calcular la coordenada x de la textura de los píxeles que se mostrará al usuario.
La coordenada x se calcula tomando la posición exacta de donde la pared fue golpeada en el mapa 2D y restando el valor entero, dejando sólo los decimales. Este decimal (wallX) entonces se multiplica por el tamaño de la textura de la pared para obtener la abscisa exacta en la pared de los píxeles que queremos dibujar. Una vez que sabemos que lo único que dejó hacer es calcular las coordenadas y de los píxeles de la textura y dibujar en la pantalla. Para ello que recorrer todos los píxeles en la pantalla en la tira vertical estamos haciendo cálculos y calcular el la coordenada exacta del pixel de la textura. Usar esto el programa y luego escribe los datos del píxel de la textura en la matriz de píxeles en la pantalla. El programa también hace paredes horizontales más oscuras que las paredes aquí para dar un efecto de iluminación básica.
Después de eso, todo lo que queda en la clase de pantalla es devolver la matriz de píxeles
Y se hace en la clase. Ahora todo lo que tenemos que hacer es añadir unas pocas líneas de código en la clase del juego para conseguir la pantalla de trabajo. Con las variables en la parte superior agregue esto:
Y en el constructor agregue que esto en algún lugar después de texturas se ha inicializado.
Y por último, en el método de ejecución
justo antes de camera.update(map). Y el programa se hace!