• No results found

Connecting a 500  L or 1200  L Buffer Line

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 menor

profundidad. 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 subimagen

subimg

(-1 = subimagen actual) del sprite con índice

sprite

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 subimagen

subimg

del sprite con índice

sprite

de forma que llene la región con esquina superior-izquierda en (x,y), anchura

w

y altura

h

.

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 con

left

y

top

(coordenadas de la esquina superior-izquierda) y

width

y

height

(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 factores

xscale

(horizontal) e

yscale

(vertical) y rotado

rot

grados en sentido

antihorario.

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) y

alpha

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 altura

h

.

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 subimagen

subimg

(-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 transparencia

alpha

(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). Si

absolute

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

y

maxcol

indican el color cuando el porcentaje de llenado (parámetro amount) es 0 y 100

respectivamente. 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 y

showborder

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ámetro

amount

: 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:

draw_set_font(font)

Indica la fuente que debe usarse para dibujar texto. Puedes indicar el valor -1 para usar la fuente por defecto (Arial 12).

draw_set_halign(halign)

Indica la alineación horizontal del texto. Debes indicar uno de los siguientes valores:

fa_left

izquierda

Related documents