Simulación de nieve

 
Hardware
Modo 13h
Retrazado Vertical
Primitivas
La Paleta
Pantallas Virtuales
Sprites
Tablas Prefedifinidas
Efectos
Texto
Formatos gráficos
Periféricos
Optimizaciones
Herramientas
Cursos
Links
Foro
Correo Electrónico
Ahora veremos un efecto muy sencillo, pero a la vez muy vistoso, es la simulación de nieve en la pantalla. Gran parte del código para hacer este efecto se parece al del campo de estrellas.

Para crear este efecto, lo que haremos será, mediante unas tablas controlar unos puntos o pixeles, que representarán a los copos de nieve. Hacer esto será  muy  parecido a lo que vimos en el campo de estrellas, en el que  las estrellas  se desplazaban horizontalmente hacia un extremo de nuestra pantalla. Pero ahora en vez de tener tres planos como en aquella ocasión,  tendremos sólo uno, el cual tendrá solo una velocidad unitaria, de uno en uno,  así irá despacio, tal como sucede con la nieve. 

También tendremos que cambiar la dirección de las  estrellas. Si antes  aumentábamos  x en z posiciones (donde z era la velocidad de una estrella), ahora aumentaremos y en una posición en vez de x, así estamos cambiando la dirección.

Como sabemos, la nieve  no  cae recta. Lo que hace es balancearse hacia  un lado y  al  otro aleatoriamente. Para hacer esto, hemos creado una variable a la que hemos llamado Jock. Esta  variable  contendrá un 1, que será negativo o positivo dependiendo del resultado de la función random(2). Si  devuelve 1, Jock será positiva, sino negativa. Así  tendremos  que  cada copo sumará a x una posición o restará dependiendo de este valor. Pero  para dar  más realismo, no tendremos que estar  haciendo  esta operación siempre, ya que si  lo hacemos así tendremos que la nieve ira totalmente en diagonal hacia el lado que determine la variable Jock (-1 izquierda y 1 derecha). Para ello lo que haremos será, recurrir de nuevo a la función random() para que nos de un número  de entre dos posibles (0 o 1), en  caso  de ser 0 el número devuelto, sumaremos a x la variable Jock, así  tendremos  un efecto  mucho más  real, ya que no se balanceará siempre, sino de vez  en cuando.

Por el momento ya tenemos la nieve que baja por la pantalla, pero queda muy mal que baje así sin nada que la acompañe, así que la haremos más real aún, haciendo que vaya formando montañas de nieve en el suelo, y en todos los objetos que encuentre. 

Para dejar el rastro de la nieve por el suelo para formar las montañas,  lo que haremos será comprobar  en  donde  vamos  a dibujar un punto mediante la  función GetPixel(), leer una posición más abajo de donde tenemos el copo  de nieve situado, en caso de que el color devuelto no  sea 0, querrá decir que, o bien estamos sobre un objeto, o bien sobre otro copo que  tenemos al lado, en este caso lo que haremos será dibujar el copo y crear otro,  así este nos quedará ahí. Pero tenemos un problema, y es que las montañas no nos quedarán  redondeadas, si no que nos quedará como si fueran edificios (palitos blancos). 

Esto pasa por que en la realidad, cuando un copo  cae  sobre  una  esquina,  tiende ir hacia uno de los lados, así que caerá, pero no se quedará haciendo una torre. Pues nosotros haremos lo mismo. Al dejar el pixel, antes de hacer uno  nuevo,  miraremos  si  está  en  un borde, mirando si en sus posiciones (x+1,y+1) y (x-1,y+1) tiene un pixel que sea 0, en ese caso procederemos a mover el copo hacia dicho lado. Así tendremos  que  los  copos irán haciendo formas redondeadas, dado que nunca nos harán torres.

Para que se nos quede en el suelo, simplemente comprobaremos que no se pase de la coordenada 199 que es el final de la pantalla, y para  nosotros representa el suelo, así que cuando lleguemos a 199, dejaremos el copo y crearemos uno  nuevo. 

Hasta el momento el ejemplo esta muy abstracto, así que mejor vean el código completo de este efecto.



Ejemplo
 

Librería gráfica: vgalib.h

Ver ejemplo
 
 

Bajar todo Bajar todo (33.6 Kb)


Volver a Efectos
1
Hosted by www.Geocities.ws

1