El post que buscas se encuentra eliminado, pero este también te puede interesar

Curso de GML: Iluminación sensilla

Curso de GML: Iluminación sensilla


Iluminación Básica

En esta ocasión aprenderemos a crear un simple sistema de iluminación mediante la utilización de surfaces. El tutorial será realizado con la versión GMS 1.4+, pero funciona con cualquier versión a partir de Game Maker Pro 8.1, no funciona en la versión lite y no ha sido probado en versiones más antiguas de Game Maker, pero puede funcionar igualmente.

Recursos Nescesarios

Los pueden encontrar en mi web:

http://desarrollocreativo.weebly.com/iluminacioacuten-baacutesica.html

Nota
Los nombres de los recursos son colocados entre comillas, y no es necesario utilizar los mismos siempre y cuando lo tengan en consideración a la hora de escribir el código.


Tutorial

Para comenzar primero crearemos un nuevo proyecto, dentro del mismo crearemos un sprite "spr_luz" al cuál centraremos el origen, y un background "back_pueblo".

Curso de GML: Iluminación sensilla

desarrollo


Una vez hecho esto crearemos dos objetos, uno que servirá de ambiente y lienzo al que llamaremos "obj_surface", y otro que utilizaremos para iluminar "obj_luz".
Dentro del "obj_surface" añadiremos un evento Create, y en él, un bloque de código con la siguiente escritura:

/////Create

global.luz = surface_create(view_wview,view_hview);


Ésto lo que hará será crear una una superficie almacenada en una variable global "luz", sobre la cual luego se dibujarán los elementos que indiquemos.

Videojuegos


A continuación añadiremos un evento Step, y en él, un bloque de código con la siguiente escritura:

/////Step

surface_set_target(global.luz);
draw_set_color(c_ltgray);
draw_rectangle(0,0,view_wview,view_hview,false);
surface_reset_target();


Éste código establecerá la surface sobre la cuál actuaremos, se establece un color de dibujo ("c_ltgray", gris claro) y luego se dibuja un rectángulo en la posición 0,0 (x,y) del ancho y alto de la view o cámara del juego (view_wview,view_hview) y al final un "false" que indica que debe estar relleno de color, en caso de colocar "true" únicamente dibujaría el borde del mismo.
La acción "surface_reset_target();" resetea la superficie para volver a dibujarla en el próximo "Step"

Nuevamente añadiremos otro evento, en este caso uno de Draw con el siguiente código:

/////Draw

draw_set_blend_mode(bm_subtract);
draw_surface(global.luz,view_xview,view_yview);
draw_set_blend_mode(bm_normal);


La función "draw_set_blend_mode()" es un poco compleja de explicar, pero básicamente establece el modo en el que se dibujrán los pixeles, luego de esto se dibuja la superficie y para finalizar se vuelve a la normalidad el modo de dibujo.

game maker


Para finalizar nos dirigimos al "obj_luz", le asignamos el sprite del foco y en él agregamos un evento Step End con el siguiente código:
/////End Step

size= 128;
color=c_white
draw_set_blend_mode(bm_subtract);
surface_set_target(global.luz);
draw_ellipse_color(x-size/2-view_xview,y-size/2-view_yview,x+size/2-view_xview,y+size/2-view_yview,color,c_black,false);

surface_reset_target();
draw_set_blend_mode(bm_normal);


De ésta forma establecemos el tamaño de la luz (128) y el color de la misma, como anteriormente lo hicimos, modificamos el modo de dibujo antes de añadir un elipse la surface que creamos el objeto "obj_surface".
Ya hemos terminado, pero si deseamos evitar que la imagen de la bombilla sea visible durante el juego simplemente debemos añadir el siguiente código en el evento Create del "obj_luz", el cual eliminará el sprite.

/////Create


sprite_index = noone


Curso


Preparando el Room
Lo siguiente es colocar todo ésto en un nuevo Room.
Crea uno y ponle el background, el "obj_surface" en alguna parte(solo hace falta uno) y agrega todos los "obj_luz" dónde quieras y ya está todo listo.

juego


Felicitaciones
Si ha llegado hasta aquí debería tener lista la iluminación, felicitaciones.

game


Anímese
Anímese a modificar los colores y el tamaño, tal vez se lleve algunas sorpresas, que el blanco es negro y el negro es blanco? que el naranja es azul? Ésto se debe al modo de dibujo que establecimos al dibujar el rectángulo. ¿Y entonces porqué la luz si respeta el color? Bueno compañero, tampoco lo sé todo yo.

Anuncios

2 comentarios - Curso de GML: Iluminación sensilla

@octapollo +2
Muy bueno, pero yo creí que se trataba de hacer funcionar la luz real en forma domótica...
@TorrencyPower
A qué te refieres con eso? tal vez se me ocurre algo