Gracias a la nueva versión de la rutina “posicionaSprite” ya somos capaces de mover los sprites por toda la pantalla. Ahora vamos a sacar provecho de esta posibilidad.
Empezamos con la nave. Más adelante haremos lo propio con los disparos y los asteroides.
La mayor parte los cambios que tenemos que hacer se derivan de la necesidad o conveniencia de usar dos bytes para la coordenada X de la nave. Por tanto, son cambios tediosos de hacer, pero rutinarios. No tienen nada especial que entender, ni nada especial que explicar. Simplemente, hay que hacerlos.
Algunos cambios, sin embargo, sí requieren algo más de explicación. Por tanto, vamos a revisarlos todos, pero sólo nos centraremos en los que requieren algo de detalle.
Los cambios que hay que hacer para que la nave se mueva por toda la pantalla son:
- En la declaración de variables del jugador, hay que usar dos bytes para la coordenada X de la nave, es decir, “jugadorXLo” y “jugadorXHi”.
- En la inicialización (rutina “inicializaJugador”), a la hora de posicionar el sprite de la nave con “posicionaSprite”, hay que pasar los dos bytes que ahora conforman la coordenada X de la nave.
- En la actualización de la posición del jugador (rutina “actualizaPosicionJugador”), a la hora de calcular la nueva posición de la nave con “calculaNuevaPosicionJugador”, hay que pasar los dos bytes que ahora conforman la coordenada X de la nave.
- En la rutina “calculaNuevaPosicionJugador”, que calcula la nueva posición (X, Y) en función del ángulo y la velocidad, cuando se actualice la coordenada X, habrá que tener cuidado de actualizar los dos bytes. La idea básica es sumar la velocidad al byte Lo y, si hay acarreo, sumar uno al byte Hi (esto se hace con “adc $00” que, recordemos, suma $00 y el acarreo).
- De nuevo en la actualización de la posición del jugador (rutina “actualizaPosicionJugador”), tras calcular la nueva posición de la nave con “calculaNuevaPosicionJugador”, hay que verificar los límites de la nueva posición (X, Y). Hasta ahora, sólo verificábamos los límites verticales, pero ahora tenemos que verificar también los límites horizontales. Esto lo explicaremos con un poco más de detalle más adelante.
- Al final de la actualización de la posición del jugador (rutina “actualizaPosicionJugador”), tras verificar los límites, hay que actualizar la posición del sprite a la nueva posición (X, Y). Ahora habrá que hacerlo con los dos bytes Lo y Hi, puesto que la coordenada X exige estos dos bytes, y la rutina “posicionaSprite” también.
- En la actualización de los disparos del jugador (rutina “actualizaDisparosJugador”), al crear un nuevo disparo con la rutina “creaDisparo”, puesto que el disparo nace en la posición (X, Y) de la nave, ahora hay que pasar los dos bytes Lo y Hi a “pixel2Char”.
Como veis, casi todos los cambios son rutinarios (nunca mejor dicho



