5.5 Replacing the Buffer Line
5.5.2 Connecting a 500 L or 1200 L Buffer Line
}
depth
Normalmente las imágenes son dibujadas en el orden en que se crean las instancias. Puedes cambiar este orden cambiando la profundidad de la imagen. El valor por defecto es 0, hasta que le introduzcas un valor diferente en las propiedades del objeto. Cuanto mayor es el valor más al fondo se dibujará la instancia. (También puedes utilizar valores negativos.) Las instancias con mayor profundidad permanecerán debajo de las instancias con menorprofundidad. Definiendo la profundidad garantizamos que las instancias son dibujadas en el orden que queremos. (Ej. El avión sobre la nube). Las instancias de fondo tendrán una alta profundidad (valor positivo) y las imágenes frontales tendrán una profundidad baja (valores negativos).
image_xscale
Un valor de escala para hacer mayores o menores las imágenes. Un valor de 1 indica el tamaño normal. Debes separar la escala horizontal xscale y la vertical yscale. Cambiando la escala también cambian el ancho y el alto de la imagen e influye en los eventos de collisión, como podrías esperar. Cambiar la escala puede ser utilizado para dar un efecto 3-D. Puedes utilizar un valor de -1 para invertir horizontalmente la imagen.image_yscale
Escala vertical yscale. 1 no modifica el tamaño. Puedes utilizar un valor de -1 para invertir verticalmente la imagen.image_angle
El ángulo con que se rota la imagen. Se especifica en grados en sentido contrario a las agujas del reloj. Un valor de 0 indica que no hay rotación. Esta variable solo puede modificarse en la versión registrada!image_alpha
El valor de transparencia (alpha) que se aplica al dibujar la imagen. Un valor de 1 es la opacidad normal; un valor de 0 es totalmente transparente.image_blend
Teñido de color que se aplica al dibujar la imagen. Un valor de color blanco (c_white) es el que se utiliza por defecto. Cuando especificas un color diferente, la imagen se tiñe de dicho color. Esto puede ser utilizado para colorear el personaje en tiempo de ejecución. Esta variable solo puede modificarse en la versión registrada!bbox_left*
Lado izquierdo de la caja de contorno utilizada por la imagen de la instancia (Se toma en cuenta el escalado).bbox_top*
parte superior de la caja de contorno utilizada por la imagen de la instancia.bbox_bottom*
parte inferior de la caja de contorno utilizada por la imagen de la instancia.Fondos
Cada room (cuarto) puede tener hasta 8 fondos. Así mismo, también puede tener un color de fondo. Todos los aspecto de estos fondos se pueden cambiar con código usando las siguientes variables (observa que algunas son vectores con un rango de 0 a 7; este número indica el fondo al que se aplicarán los cambios):
background_color
Color de fondo para el cuarto.background_showcolor
Indica si se debe limpiar la pantalla con el color de fondo.background_visible[0..7]
Indica si el fondo indicado es visible o no. Por ejemplo, para indicar que el fondo número 3 no debe mostrarse, deberíamos hacerlo así: background_visible[3]=false;background_foreground[0..7]
Indica si el fondo está en primer plano (se dibujará encima de todo lo demás, tapando todo lo que quede por debajo).background_index[0..7]
Imagen de fondo asignada al fondo indicado.background_x[0..7]
Posición x del fondo.background_y[0...7]
Posición y del fondo.background_width[0...7]*
Anchura de la imagen del fondo.background_height[0...7]*
Altura de la imagen del fondo.background_htiled[0..7]
Indica si el fondo debe repetirse horizontalmente para llenar toda la pantalla.background_vtiled[0..7]
Indica si el fondo debe repetirse verticalmente para llenar toda la pantalla.background_xscale[0..7]
Factor de escalado horizontal del fondo: un número entre 0 y 1 hará la imagen más pequeña y un número mayor que 1 la hará más grande. (Debe ser un valor positivo)background_yscale[0..7]
Factor de escalado vertical del fondo: un número entre 0 y 1 hará la imagen más pequeña y un número mayor que 1 la hará más grande. (Debe ser un valor positivo)background_hspeed[0..7]
Velocidad horizontal de scrolling del fondo, en píxeles por step. El scrolling es el movimiento del fondo, por lo tanto esto se refiere al movimiento horizontal del fondo.background_vspeed[0..7]
Velocidad vertical de scrolling del fondo, en píxeles por step. El scrolling es el movimiento del fondo, por lo tanto esto se refiere al movimiento vertical del fondo.background_blend[0..7]
Color de teñido usado al dibujar el fondo. El valor por defecto es c_white. Esta variable sólo se puede usar en la versión registrada!background_alpha[0..7]
Factor de transparencia usado al dibujar el fondo. 1 es el valor normal (imagen totalmente opaca) y 0 es totalmente transparente (utiliza valores intermedios para dibujar fondos parcialmente transparentes).Dibujando sprites y fondos
Normalmente los objetos tienen un sprite asociado que se dibuja en la pantalla. Pero también puedes usar el evento draw. para dibujar otras cosas. Esta sección y las dos siguientes te darán información sobre este aspecto. Primero de todo, hay un grupo de funciones que sirven para dibujar sprites y fondos de distintas maneras. Estas funciones te dan un gran control sobre la apariencia gráfica del juego y te permiten hacer cosas como dibujar sólo un trozo de un fondo, rotar un sprite...
draw_sprite(sprite,subimg,x,y)
Dibuja la subimagensubimg
(-1 = subimagen actual) del sprite con índicesprite
con su origen en la posición (x,y) sin teñirlo de ningún color y sin usar transparencia.draw_sprite_stretched(sprite,subimg,x,y,w,h)
Dibuja la subimagensubimg
del sprite con índicesprite
de forma que llene la región con esquina superior-izquierda en (x,y), anchuraw
y alturah
.draw_sprite_tiled(sprite,subimg,x,y)
Dibuja el sprite repitiéndolo horizontal y verticalmente de forma que llene toda la pantalla. (x,y) es la posición donde se dibuja una de las copias del sprite.draw_sprite_part(sprite,subimg,left,top,width,height,x,y)
Dibuja la parte del sprite indicada con su esquina superior izquierda en (x,y). La parte del sprite que queremos dibujar se indica conleft
ytop
(coordenadas de la esquina superior-izquierda) ywidth
yheight
(anchura y altura del trozo que queremos dibujar).draw_background(back,x,y)
Dibuja el fondo en la posición (x,y), sin teñirlo de ningún color y sin transparencia.draw_background_stretched(back,x,y,w,h)
Dibuja el fondo escalado de forma que ocupe la región indicada.draw_background_tiled(back,x,y)
Dibuja el fondo repitiéndolo en horizontal y vertical de forma que llene toda la pantalla.draw_background_part(back,left,top,width,height,x,y)
Dibuja el trozo indicado del fondo con su esquina superior-izquierda en la posición (x,y).Las funciones siguientes son versiones extendidas de las funciones anteriores. Estas funciones sólo están disponibles en la versión registrada de Game Maker.
draw_sprite_ext(sprite,subimg,x,y,xscale,yscale,rot,color,alpha)
Dibuja el sprite escalado con factoresxscale
(horizontal) eyscale
(vertical) y rotadorot
grados en sentidoantihorario.
color
indica el color con el que queremos teñir el sprite (usa el color blanco c_white si no quieres teñir el sprite de ningún color) yalpha
indica el factor de transparencia. Un valor igual a 0 hace la imagen totalmente transparente y un valor igual a 1 la hace totalmente opaca. Con valores intermedios conseguirás que la imagen sea parcialmente transparente. Con esta función se pueden crear efectos muy espectaculares como explosiones semi- transparentes.escalado de forma que ocupe la región indicada: esquina superior izquierda en (x,y), anchura
w
y alturah
.color
indica el color de teñido y
alpha
el factor de transparencia.draw_sprite_tiled_ext(sprite,subimg,x,y,xscale,yscale,color,alpha)
Dibuja el sprite repetido de forma que cubra toda la pantalla con factores de escala, color de teñido y factor de transparencia.draw_sprite_part_ext(sprite,subimg,left,top,width,height,x,y,xscale,ys
cale,color,alpha)
Dibuja la parte indicada del sprite con factores de escala, color de teñido y factor de transparencia.draw_sprite_general(sprite,subimg,left,top,width,height,x,y,xscale,ysc
ale,rot,c1,c2,c3,c4,alpha)
La función más general para dibujar sprites. Dibuja la parte indicada de la subimagensubimg
(-1 = subimagen actual) del sprite con índice sprite situando su esquina superior-izquierda en la posición (x,y) y con factores de escala, ángulo de rotación, un color de teñido para cada una de las 4 esquinas del sprite (en el orden arriba-izquierda, arriba-derecha, abajo-derecha y abajo-izquierda) y un factor de transparencia. Observa que el sprite se rotará sobre su esquina superior-izquierda y no sobre su origen.draw_background_ext(back,x,y,xscale,yscale,rot,color,alpha)
Dibuja el fondo escalado, rotado, teñido del color especificado (usa c_white si no quieres teñirlo) y con factor de transparenciaalpha
(0-1).draw_background_stretched_ext(back,x,y,w,h,color,alpha)
Dibuja el fondo escalado de forma que ocupe la región indicada con color de teñido y factor de transparencia.draw_background_tiled_ext(back,x,y,xscale,yscale,color,alpha)
Dibuja el fondo repetido de forma que ocupe todo el cuarto con factores de escala, color de teñido y factor de transparencia.draw_background_part_ext(back,left,top,width,height,x,y,xscale,yscale,
color,alpha)
Dibuja la parte indicada del fondo situando su esquina superior-izquierda en la posición (x,y) con factores de escala, color de teñido y factor de transparencia.draw_background_general(back,left,top,width,height,x,y,xscale,yscale,r
ot,c1,c2,c3,c4,alpha
) La función más general para dibujar fondos. Dibuja la parte indicada del fondo situando su esquina superior-izquierda en la posición (x,y) con factores de escala, ángulo de rotación, un color de teñido para cada una de las cuatro esquinas (en el orden arriba-izquierda, arriba-derecha, abajo-derecha y abajo- izquierda) y un factor de transparencia. Observa que el sprite se rotará sobre su esquina superior-izquierda del trozo indicado del fondo.Dibujando formas
Game Maker dispone de una amplia colección de funciones para dibujar diferentes formas. También hay otras funciones para dibujar texto (consulta el capítulo siguiente). Estas funciones de dibujo sólo se pueden usar en el evento draw ya que no tienen sentido si se colocan en otro evento. Debes tener en cuenta que las colisiones entre las instancias se determinan según sus sprites y sus máscaras de colisión y no según lo que cada instancia dibuja en la pantalla. Las funciones siguientes sirven para dibujar las formas básicas:
draw_clear(col)
Pinta todo el cuarto del color especificado.draw_clear_alpha(col,alpha)
Pinta todo el cuarto del color especificado y con el factor de transparencia indicado (muy útil para superficies).draw_point(x,y)
Dibuja un punto en (x,y) en el color de dibujo actual.draw_line(x1,y1,x2,y2)
Dibuja una línea desde (x1,y1) hasta (x2,y2).draw_rectangle(x1,y1,x2,y2,outline)
Dibuja un rectángulo.outline
indica si sólo debe dibujarse el borde (true) o si el rectángulo debe estar relleno (false).draw_roundrect(x1,y1,x2,y2,outline)
Dibuja un rectángulo redondeado.outline
indica si sólo debe dibujarse el borde (true) o si el rectángulo debe estar relleno (false).draw_triangle(x1,y1,x2,y2,x3,y3,outline)
Dibuja un triángulo.outline
indica si sólo debe dibujarse el borde (true) o si debe estar relleno (false).draw_circle(x,y,r,outline)
Dibuja un círculo con su centro en (x,y) y radio r.outline
indica si sólo debe dibujarse el borde (true) o si debe estar relleno (false).draw_ellipse(x1,y1,x2,y2,outline)
Dibuja una elipse.outline
indica si sólo debe dibujarse el borde (true) o si debe estar rellena (false).draw_arrow(x1,y1,x2,y2,size)
Dibuja una flecha desde (x1,y1) hasta (x2,y2).size
indica el tamaño de la flecha en píxeles.draw_button(x1,y1,x2,y2,up)
Dibuja un botón.up
indica si está pulsado (0) o no (1).draw_path(path,x,y,absolute)
Con esta función puedes dibujar el path indicado en el cuarto con su comienzo en la posición (x,y). Siabsolute
es true el path se dibuja en la posición en la que fue definido y los valores de x e y son ignorados.draw_healthbar(x1,y1,x2,y2,amount,backcol,mincol,maxcol,direction,show
back,showborder)
Con esta función puedes dibujar una barra de vida (o una barra que indique cualquier otra cosa como poder, magia,…). Los parámetros x1, y1, x2 e y2 indican el área total de la barra.amount
indica el porcentaje de la barra que debe estar relleno (debe estar entre 0 y 100).backcol
es el color de fondo de la barra.mincol
ymaxcol
indican el color cuando el porcentaje de llenado (parámetro amount) es 0 y 100respectivamente. Para un porcentaje intermedio el color se interpola entre estos dos. Así puedes crear fácilmente una barra que vaya de verde a rojo, por ejemplo.
direction
es la dirección en la que la barra se dibuja: 0 significa que la barra está fijada a la izquierda, 1 a la derecha, 2 arriba y 3 abajo. Finalmente,showback
indica si debe mostrarse una caja de fondo yshowborder
si la caja de fondo y la barra deben tener un borde negro.Muchas de las funciones anteriores utilizan los colores y transparencia generales de dibujo que pueden ser cambiados con estas funciones:
draw_set_color(col)
Indica el color que debe usarse para dibujar primitivas.draw_set_alpha(alpha)
Indica el factor de transparencia que debe usarse para dibujar primitivas. Debe estar comprendido en el rango 0-1. 0 significa totalmente transparente y 1 totalmente opaco.draw_get_color()
Devuelve el color general de dibujo utilizado para dibujar primitivas.Hay un gran rango de colores predefinidos:
c_aqua
c_black
c_blue
c_dkgray
c_fuchsia
c_gray
c_green
c_lime
c_ltgray
c_maroon
c_navy
c_olive
c_purple
c_red
c_silver
c_teal
c_white
c_yellow
Sin embargo, también puedes usar las funciones siguientes para crear tus propios colores:
make_color_rgb(red,green,blue)
Devuelve un color con los componentes indicados de rojo, verde y azul. Los valores indicados deben estar entre 0 y 255 (ambos inclusive).make_color_hsv(hue,saturation,value)
Devuelve un color con los componentes indicados de brillo, saturación y valor. Los valores indicados deben estar entre 0 y 255 (ambos inclusive).color_get_red(col)
Devuelve el componente de rojo del color.color_get_green(col)
Devuelve el componente de verde del color.color_get_blue(col)
Devuelve el componente de azul del color.color_get_hue(col)
Devuelve el componente de brillo del color.color_get_saturation(col)
Devuelve el componente de saturación del color.color_get_value(col)
Devuelve el componente de valor del color.merge_color(col1,col2,amount)
Devuelve un color resultante de mezclar los dos colores indicados. La mezcla se determina por el parámetroamount
: un valor igual a 0 corresponde a col1, un valor de 1 corresponde a col2 y un valor intermedio hace que se mezclen los dos colores.draw_getpixel(x,y)
Devuelve el color del píxel en la posición (x,y) del cuarto. Esta función no es muy rápida, así que úsala con cuidado.screen_save(fname)
Salva una imagen bmp de la pantalla en el archive especificado. Útil para crear screenshots.screen_save_part(fname,x,y,w,h)
Salva la parte de la pantalla indicada a un archive bmp.Fuentes y texto
A veces necesitas dibujar texto. Para ello, primero debes indicar la fuente que quieres usar. Las fuentes se pueden definir creando un recurso de fuente (directamente en Game Maker o usando las funciones de modificación de recursos). Para dibujar texto disponemos de varias funciones distintas. En todas ellas debes indicar el texto a ser dibujado y la posición del mismo. Además, existen dos funciones para definir la alineación del texto en horizontal y vertical respecto a esa posición.
Para dibujar texto disponemos de las funciones siguientes: