miércoles, 19 de diciembre de 2012

GameMaker: Acciones básicas I

Continuando con el repaso de GameMaker vamos a hablar ahora de las acciones básicas del programa e ir profundizando en ellas poco a poco. Recordemos, eso si, antes, que las acciones son la respuesta a los eventos que mencionaba en el post anterior. Primero hay un evento (ocurre algo en el juego) y como consecuencia se ejecutan una o varias acciones.


Move Actions   

Move Fixed: Usa esta accion para iniciar el movimiento de una instancia en una direccion particular. Puedes indicar la direccion usando los botones con las flechas. Usa el boton central para detener el movimiento. Necesitas especificar la velocidad del movimiento que se mide en pixels por fotograma, y preferiblemente usar valores positivos. Puedes especificar direcciones múltiples. En este caso se realiza una elección aleatoria. De esta forma puedes hacer que un enemigo se empiece a mover a la derecha o a la izquierda, por poner un ejemplo.

Move Free: Segunda forma de especificar movimiento. Puedes indicar una dirección precisa con un angulo entre 0 y 360, siempre teniendo en cuenta que el 0 apunta a la derecha y aa direccion gira en sentido contrario de las agujas del reloj. Por ejemplo 90 es arriba. Si quieres una direcció arbitraria puedes escribir “random(360)”, por que la funcion random devuelve un número aleatorio menor que el valor indicado.

Hay un checkbox Relative. Si lo marcas, el nuevo movimiento se añade al que había. Por ejemplo, si la instancia se mueve hacia arriba y añades movimiento a la derecha el nuevo movimiento es arriba a la derecha.

Move Towards: Esta accion nos proporciona un tercer modo de movimiento. Indica la posicion y una velocidad y la instancia empieza a moverse con la velocidad hacia la posición, teniendo en cuenta que no parará en la posición. Por eemplo, si quieres que una bala vaya hacia la posicion de una nave puedes usar spaceship.x, spaceship.y. Si chequeas la casilla Relative, especificas una posicion relativa a la posicion de la instancia actual. (La velocidad no es tomada como relativa).

Speed Horizontal: La velocidad de una instancia consiste en una parte horizontal y una vertical. Con esta accion puedes cambiar su parte horizontal. Un valor positivo significa movimiento a la derecha mientras que negativo es a la izquierda. Usa relativo para incrementar o decrementar la velocidad cada vez en vez de usar una fija.

Speed Vertical: Similar al horizontal pero en vertical.

Set Gravity: Con esta accion puedes especificar gravedad para un objeto particular. Especificas la direccion (angulo entre 0 y 360) y velocidad. En cada fotograma es añadida al movimiento actual de la instancia, esta cantidad de velocidad en la direccion dada. Normalmente necesitas un valor pequeño como 0.1 en una dirección hacia abajo (270 grados). Si marcas la casilla relativa se incremente la gravedad y la dirección. Notese que contrario a la vida real, se pueden poner diferentes direcciones y fuerzas de gravedad a diferentes objetos.

Reverse Horizontal: Con esta accion inviertes el movimiento horizontal de la instancia. Esto puede por ejemplo usarse cuando el objeto choca con una pared vertical.

Reverse Vertical: Con esto inviertes el movimiento vertical de la instancia.

Set Friction: La fricción decrementa la velocidad de una instancia cuando se mueve. Especificando la cantidad de friccion, en cada salto esta cantidad se resta de la velocidad, hasta que la velocidad se convierta en 0. Normalmente queremos valores muy pequeños como 0.01.

Jump to position: Usa esta accion si quieres situar una instancia en una posicion particular. Simplemente especificas las coordenadas x e y para que la instancia se coloque con su punto de referencia en esa posicion. Si marcas Relative, la posicion es relativa a la posicion actual de la instancia. Esta opción es a menudo usada para mover continuamente una instanca en cada salto, incrementando su posicion un poco.

Jump to Start: Esta accion hace que la instancia vuelva a la posición donde fue creada.

Jump to Random: Esta acción mueve la instancia a una posición aleatoria de la habitación. Solo se eligen posiciones donde la instancia no interseca con otra instancia solida. Puedes especificar ademas, el ajuste usado. Puedes especificar un valor horizontal de ajuste separado del vertical.

Align to Grid: Con esta accion puedes redondear a la posición de la instancia en una rejilla. Puedes indicar ambos, el ajuste vertical y el horizontal (El tamaño de las celdas de la rejilla). Esto puede ser util para asegurarte de que las instancias se desplazan en casillas de una medida concreta.

Wrap Screen: Con esta accion puedes hacer que una instancia reaparezca por el otro lado de la habitación si sale por uno de los lados. Esta acción se usa normalmente con el evento Outside. Notese que la instancia debe tener una velocidad para trasladarse y asi funcionar, por que la direccion del “teletransporte” depende de la del movimiento. Puedes indicar si transportarse solo horizontalmente, solo vertical o en ambas direcciones.

Hay que destacar que si estamos desplazando nuestra instancia de objeto con el metodo Jump to position, no funcionará el wrap, ya que este debe llevar alguna velocidad.

Move to Contact: Con esta accion puedes mover la instancia en una dirección dada, mientras entre en contacto con un objeto. Si hay una colision en la posición actual la instancia no se moverá. Sin embargo, la instancia es colocada justo antes de que la colisión ocurra. Puedes especificar la direccion y además, una distancia maxima a mover. Por ejemplo cuando la instancia esta cayendo puedes moverla una distancia maxima mientras un objeto se encuente. Puedes ademas indicar si consideras objetos solidos o todos los objetos. Tipicamente pon esta accion en un evento de colision para asegurarte de que la instancia se para en contacto con la otra instancia envuelta en la colisión. El problema de esta acción es que la instancia solo para si va en la dirección indicada. (En otras ocasiones a mi me hace una especie de wrap y no lo acabo de entender).

Bounce: Cuando pones esta acción en el evento de colision con otro objeto, la instancia rebota desde este objeto de modo natural. Si defines el parámetro preciso como false, solo los muros verticales y horizontales son tradados correctamente. Cuando marcas precise a true, además muros ladeados (incluso curvados) son tratados correctamente. Esto sin embargo es más lento, evidentemente. Además, puedes indicar cuando el bote solo se haga sobre objetos solidos o sobre todos los objetos. Notese que el bote no es completamente real por que depende de muchas propiedades, pero en la mayoría de situaciones el efecto da el pego.

(Por cierto, que estoy sacando todos estos datos de la ayuda del programa y probandolo personalmente a ver si voy aprendiendo :P)

No hay comentarios:

Publicar un comentario