• No results found

3.2 Methods and Sequences

3.2.1 Creating Methods

automáticamente.

En algunas ocasiones puede que quieras conocer la posición del ratón respecto a la ventana (normalmente se usa la posición del ratón respecto a un cuarto o a una vista). Las siguientes funciones sirven para esto:

window_mouse_get_x()

Devuelve la coordenada x del puntero en la ventana.

window_mouse_get_y()

Devuelve la coordenada y del puntero en la ventana.

window_mouse_set(x,y)

Indica la nueva posición del puntero en la ventana.

Vistas

Como ya deberías saber puedes definir hasta 8 vistas diferentes al diseñar un cuarto. Una vista se define por su área en el cuarto y por su puerto o viewport en la pantalla (la región de dibujo dentro de la ventana). Usando vistas puedes mostrar diferentes partes del cuarto en diferentes lugares de la pantalla. Además, puedes asegurar que un objeto concreto siempre permanezca visible en una vista.

Puedes controlar las vistas con código. Puedes hacerlas visibles o invisibles, cambiar su posición o tamaño dentro de la región de dibujo o en el cuarto (lo cual es muy útil cuando no indicas ningún objeto que deba ser seguido por la vista). Puedes cambiar el tamaño de los bordes horizontal y vertical alrededor del objeto a ser seguido. Si el objeto que quieres que sea seguido cambia a otro tipo de objeto durante el juego (por ejemplo, si acumula mucha experiencia y evoluciona en un personaje más poderoso) puede que las vistas siguientes no lo sigan correctamente. Para solucionar esto, puedes indicar este código en el evento de creación de todos los objetos del personaje (en este ejemplo se supone que la vista principal es la vista 0):

{

view_object[0] = object_index;

}

Las siguientes variables actúan sobre las propiedades de las vistas. Todas, excepto las dos primeras, son vectores con 8 elementos: el primer elemento (0) indica la primera vista y el último elemento (7) la última.

view_enabled

Indica si las vistas están activadas en el cuarto actual.

view_current*

La vista que actualmente se está dibujando (0...7). Usa esta variable sólo en el evento draw. Por ejemplo, puedes chequear el valor de esta variable para dibujar algo sólo en unas vistas y no en otras. El valor de esta variable no se puede cambiar.

view_xview[0..7]

Posición X de la vista en el cuarto.

view_yview[0..7]

Posición Y de la vista en el cuarto.

view_wview[0..7]

Anchura de la vista en el cuarto.

view_hview[0..7]

Altura de la vista en el cuarto.

view_xport[0..7]

Posición X del puerto en la región de dibujo.

view_yport[0..7]

Posición Y del puerto en la región de dibujo.

view_wport[0..7]

Anchura del puerto en la región de dibujo.

view_hport[0..7]

Altura del puerto en la región de dibujo.

view_angle[0..7]

Ángulo de rotación usado para la vista en el cuarto (grados en sentido antihorario).

view_hborder[0..7]

Tamaño en píxeles del borde horizontal alrededor del objeto a seguir por la vista.

view_vborder[0..7]

Tamaño en píxeles del borde vertical alrededor del objeto a seguir por la vista.

view_hspeed[0..7]

Velocidad horizontal máxima de la vista.

view_vspeed[0..7]

Velocidad vertical máxima de la vista.

view_object[0..7]

Objeto cuya instancia debe permanecer visible en la vista. Si hay varias instancias de este objeto se usará la primera. Puedes asignar una id de una instancia a esta variable para indicar una instancia concreta que quieras seguir.

Observa que el tamaño de la imagen en la pantalla se calcula a partir de las vistas visible al comienzo del cuarto. Si cambias las vistas durante el juego puede que ya no entren correctamente en la pantalla. Para solucionar esto, puedes adaptar tú mismo el tamaño de la pantalla con las siguientes funciones:

window_set_region_size(w,h,adaptwindow)

Indica la anchura y altura de la región de dibujo en la ventana. adaptwindow indica si el tamaño de la ventana debe adaptarse si la región de dibujo no cabe dentro de ella. La ventana siempre se adaptará si usas escalado fijo (Consulta la función window_set_region_scale() en el capítulo La ventana).

window_get_region_width()

Devuelve la anchura actual de la región de dibujo.

window_get_region_height()

Devuelve la altura actual de la región de dibujo.

A veces necesitarás conocer la posición del ratón. Normalmente puedes hacer esto con las variables mouse_x y mouse_y. Cuando hay muchas vistas, estas variables dan la posición del ratón respecto a la vista en la que el ratón se encuentra. Pero puede ser que en alguna ocasión necesites conocer la posición del ratón respecto a una vista concreta, incluso cuando el ratón se encuentre fuera de esa vista. Para hacer esto, puedes usar las siguientes funciones:

window_view_mouse_get_x(id)

Devuelve la coordenada x del ratón respecto a la vista indicada.

window_view_mouse_get_y(id)

Devuelve la coordenada y del ratón respecto a la vista indicada.

window_view_mouse_set(id,x,y)

Indica la posición del ratón respecto a la vista indicada.

window_views_mouse_get_x()

Devuelve la coordenada x del ratón respecto a la vista en la que se encuentra (es lo mismo que mouse_x).

encuentra (es lo mismo que mouse_y).

window_views_mouse_set(x,y)

Indica la posición del ratón respecto a la primera vista que es visible.

Transiciones

Al moverse de una room a otra puedes seleccionar una transición. También puedes seleccionar la transición que se utilizará en el frame siguiente sin tener que cambiar de cuarto. Para esto usamos la variable transition_kind. Asignándole un valor entre 1 y 13 se usará la transición correspondiente. Si usamos un valor igual a 0 significa que no se aplicará ninguna transición. La transición sólo se aplicará la próxima vez que se dibuje un frame.

transition_kind

Indica la transición al próximo frame: 0 = sin transición

1 = Crear desde la izquierda 2 = Crear desde la derecha 3 = Crear desde arriba 4 = Crear desde abajo 5 = Crear desde el centro 6 = Cambiar desde la izquierda 7 = Cambiar desde la derecha 8 = Cambiar desde arriba 9 = Cambiar desde abajo 10 = Mezclar desde la izquierda 11 = Mezclar desde la derecha 12 = Mezclar desde arriba 13 = Mezclar desde abajo

Observa que es muy sencillo crear tus propias transiciones. Por ejemplo, para crear un efecto de oscurecimiento puedes dibujar un rectángulo negro que tape toda la pantalla y hacer que su factor de transparencia vaya aumentando poco a poco. O puedes cambiar la posición y el tamaño de una vista para mover el cuarto fuera de la zona visible. Utilizando superficies y partículas puedes crear transiciones realmente asombrosas!

Redibujando la pantalla

Normalmente al final de cada paso del juego (step) el cuarto se dibuja en la pantalla. Pero en algunas ocasiones puede que quieras dibujar el cuarto en otro momento. Esto ocurre cuando tu programa toma el control, por ejemplo: antes de que el programa se congele durante un largo período es recomendable dibujar el cuarto. O cuando el juego muestra un mensaje y espera a que el jugador presione un tecla para continuar es necesario dibujar el cuarto en medio de esta operación. Existen dos funciones para hacer esto:

screen_redraw()

Redibuja la pantalla ejecutando todos los eventos de dibujo.

Para entender la segunda función es necesario ver cómo trabaja internamente el mecanismo de dibujo. Internamente existe una imagen donde se dibuja todo. Esta imagen no es visible en la pantalla. Sólo al final de un paso del juego, cuando se ha dibujado todo, la imagen de la pantalla se reemplaza por esta imagen interna (esta técnica se conoce como “double buffering”). La primera función scrren_redraw() dibuja la imagen interna y luego refresca la imagen de la pantalla. La segunda función screen_refresh() sólo refresca la imagen de la pantalla, pero no actualiza la imagen interna.

Ahora deberías entender por qué no puedes usar las acciones o funciones de dibujo en otros eventos a parte de los eventos de dibujo. Si lo haces así, dibujarías elementos en la imagen interna pero no en la pantalla. Cuando se ejecuta el evento draw, primero se dibuja el fondo del cuarto, tapando y borrando todo lo que habías dibujado en la imagen interna. Pero cuando usas screen_refresh() después de dibujar algo, la imagen se volverá visible en la pantalla. Por ejemplo, podemos crear un trozo de código que dibuje un texto en la pantalla, llame a la función de refresco y espere a que el jugador pulse una tecla:

{

draw_text(screen_width/2,100,'Pulsa cualquier tecla para

Related documents