USO DE VECTORES PARA EL MOVIMIENTO

Ahora vamos a cambiar un poco el esquema tradicional con que movemos los objetos dentro del ambiente de KPL, se van a empezar a utilizar los vectores. Para eso se requiere que el objeto que vamos a mover tenga definido los siguientes atributos:

o        Una dirección o ángulo (Ө) al cual apunta. En el juego Racer2 este se llama Heading.

o        Dos variables para almacenar la posición de la cabeza del vector.

En la siguiente figura se muestra el esquema que se sigue para poder manejar el movimiento:  

Para rotar el objeto sobre si mismo se hace lo siguiente:

Method RotateCar( Heading As Decimal )

// Se le indica el ángulo al cual quiero llegar y se le aplica

// el ajuste dinámico respectivo de la velocidad de la animación

      Jugador1.Heading = Jugador1.Heading + AdjustForFrameRate( Heading )

// Se rota el objeto

      RotateSprite( Jugador1.Imagen, Jugador1.Heading )

End Method

Pero para mover el objeto una cierta cantidad hacia adelante en la dirección que indica el ángulo (Ө), se requiere descomponer el vector que especifica este incremento en sus respectivas componentes X y Y:

Method MoveCar()

      Define amountOfMovement As Decimal = AdjustForFrameRate( Jugador1.speed )

// Se saca la componente en X del vector de incremento de la posición

      Define amountX As Decimal = Cos( Jugador1.Heading * piOver180 ) * amountOfMovement

// Se recalcula la nueva posición en el eje X del objeto

      Define nextX As Decimal = Jugador1.posX - amountX

// Se revisa si esta nueva posición es valida 

If NextX > 0 And NextX < ScreenWidth()

GetSpriteWidth(Jugador1.Imagen) Then

            Jugador1.posX = nextX

      End If

// Se saca la componente en Y del vector de incremento de la posición

      Define amountY As Decimal = Sin( Jugador1.Heading * piOver180 ) * amountOfMovement

// Se recalcula la nueva posición en el eje Y del objeto

      Define nextY As Decimal = Jugador1.posY amountY

// Se revisa si esta nueva posición es valida

      If nextY > 35 And nextY < ScreenHeight() GetSpriteHeight(Jugador1.Imagen) Then

            Jugador1.posY = nextY

      End If

// Se mueve el objeto hacia su nueva posición 

      MoveSpriteToPoint( Jugador1.Imagen, Jugador1.posX, Jugador1.posY )

End Method

Algo para tener en cuenta es que las funciones que calculan el coseno y el seno en KPL trabajan con Radianes, por tal motivo, se requiere hacer la conversion de grados –que es la unidad con que estamos trabajando en este juego, porque es más facil de implementar– a radianes. La función de la conversión es la siguiente:

<< Anterior




EJERCICIO FINAL

Ahora, después de haber visto todos estos métodos de animación y de programación de juegos, te encuentras en la capacidad de desarrollar tu propio juego completamente funcional. Por eso, se propone como ejercicio final la realización de tu propio juego, el cual debe reunir todo lo aprendido a lo largo del curso, y puede ser desarrollado en grupos o individualmente.