bzk Gaming

Hola bueno ahí que seguir con el tutorial y ahora vamos a ver cómo se pueden mover objetos en 3D. Seguiremos con el proyecto del los tutoriales anteriores “Mijuego3D”.

Lo primero que queremos que haga nuestro tanque es poder verlo en 360 grados y para esto haremos que rote sobre su eje Y. así pues agregaremos una variable de clase llamada tanRotacion de tipo flotante.

//rotacion del tanque

float tanRotacion = 0.0f;

Después en el método Update() incluiremos este código:

//aumentar rotacion

tanRotacion += 0.01f;

Esto ara que cada vez que se actualiza el juego se aumentara la rotación. Ahora solo falta que el método para dibujarlo pueda interpretar la rotación del modelo.

Quitaremos esta línea de código y la sustituiremos por lo siguiente

efecto.World = origen[malla.ParentBone.Index];//cambiar por

efecto.World =origen[malla.ParentBone.Index ]* Matrix.CreateRotationY(tanRotacion);

Y tendremos nuestro tanque rotando en nuestra pantalla si ejecutamos en este momento. Aquí tenemos que explicar el cambio más trascendente que hicimos que es el método de dibujo.

Recuerden que origen es como tenemos nuestro modelo en 3D sin ninguna deformación, este será la base para cualquier trasformación que queramos hacer al objeto, además eso lo multiplicamos con el método estático CrearRotacionenY (traducido al español) de Matrix el cual recibe un numero flotante que representan los radianes que quiere que se rote el objeto sobre su eje Y.

Si cambiamos la rotación obtendremos el mismo resultado, y solo cambiara la dirección de la rotación.

//disminuir rotacion

tanRotacion -= 0.01f;

Ahora queremos que nuestro tanque, pues nos proteja ¿no?, para eso si hicieron, para esto tiene que patrullar un área digamos un circulo en el cual de vueltas para ver si ahí enemigos.

Esto lo haremos de una forma muy sencilla, volveremos a cambiar el efecto del mundo con al siguiente línea:

efecto.World = origen[malla.ParentBone.Index] *Matrix.CreateTranslation(mPos)* Matrix.CreateRotationY(tanRotacion);

 

Esto lo que hace es que nuestro tanque primero se mueva y después de vuelta, algo así como si corriéramos en círculos en un árbol. Pero aparte de eso necesitamos que se desplace un poco hacia afuera del circulo imaginario, esta distancia será el radio de nuestro circulo.

Así que agregamos otra variable a nivel de clase que se llame radio de vigilancia

Vector3 radioVigia = new Vector3(0.0f, 0.0f, 200.0f);

Y en el método Initialize vamos a aumentar este radio a la posición del tanque para que el tanque toque el perímetro del círculo imaginario.

mPos+=radioVigia ;//toca el circulo imaginario

Ahora deberíamos tener algo como se muestra en el video. Pero el efecto no es muy bueno, no parece que el tanque este girando como lo haría un auto, siguiendo las llantas así que agregaremos algo más adelante.

Advertisement