MOVER EL FONDO

Ahora desarrollaremos un ejemplo que nos permite crear el efecto de movimiento del fondo. Esta técnica es muy útil para hacerle creer al usuario que los objetos se están moviendo en el universo creado para el juego, mientras que en realidad lo único que se mueve es el fondo (en inglés background) de la pantalla.

Program RotarFondo

                // Se define el tamaño de la ventana

                Define AnchoPantalla As Int = 640

                Define AltoPantalla As Int = 480

                // Se crean las variables para almacenar la información relevante

// sobre el sprite

                Define NombreSprite As String

                Define AltoSprite As Int

                Define AnchoSprite As Int              

                Method DibujarCiudad()

                               NombreSprite="CIUDAD"

                               LoadSprite(NombreSprite, "CityScape.png")

                               // Se obtienen las dimensiones del sprite

                               AnchoSprite = GetSpriteWidth( NombreSprite )

                               AltoSprite = GetSpriteHeight( NombreSprite )

                               // Se le dice a KPL que coloque el sprite de la ciudad en la

// parte inferior de la pantalla, y que repita

// horizontalmente la misma imagen hasta llenarla por

// completo. Esto se hace para que el fondo llene toda la

// pantalla aun si la imagen utilizada en el sprite es más

// pequeña.

                               TileSprite( NombreSprite, 0, AltoPantalla - AltoSprite, AnchoPantalla + 2, AltoSprite, 0, 0 )

                End Method

                Method Main()

                               // Se le dice a KPL que utilice nuestro tamaño personalizado

// para la pantalla

                               SetScreenSize(AnchoPantalla,AltoPantalla)

                               // Se dibuja la ciudad

                               DibujarCiudad()

                               While True

                                               BeginFrame()

                                               // Se copia una porción de la parte izquierda de la

// pantalla justo hacia el extremo derecho de la misma.

                                               // Hay que tener en cuenta que la única parte de la

// pantalla que este método copia son los sprites a los

                                               // cuales se les ha aplicado la instrucción TileSprite

                                               CopyRect( 0, AltoPantalla - AltoSprite, 1, AltoSprite, AnchoPantalla + 1, AltoPantalla - AltoSprite )

                                               // Se rota todo el ancho de la pantalla, desde la punta

// de los edificios hasta la parte inferior de la

// misma, un píxel a la izquierda.  El área que se rota

// incluye la porción que se copió en el paso anterior.

                                               // De esta forma es como se logra el efecto de

// continuidad en el fondo.

                                               ScrollBackground( 0, AltoPantalla - AltoSprite, AnchoPantalla + 2, AltoSprite, -1, 0 )

                                               RefreshScreen()

                                               Delay(20)

                               End While

                End Method

End Program

<< Anterior