Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3818 miembros registrados.
El último usuario registrado es Srand.

Nuestros miembros han publicado un total de 86252 mensajes en 12295 argumentos.

[ACE][Tutorial]Interruptores, variables y conditional branches

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker VX ACE [ACE][Tutorial]Interruptores, variables y conditional branches

Mensaje por BreinLand entertainment el 2016-08-23, 04:02

¡Buenas a todos!
Este es un tutorial sobre interruptores y variables… principalmente está basado en RPGmaker VX ACE, pero las bases deberían ser parecidas sino iguales para las demás versiones del rpgmaker.
Es un tutorial que habla de las posibilidades de ambas cosas… por lo que puede ser útil tanto para aquellos que no saben nada de interruptores y variables, como aquellos que sepan ya suficiente pero quizás no sepan alguna cosa extra que haya por aquí.
En primer lugar… empezaremos definiendo qué es cada cosa.

Interruptores: (O switches)

Lo primero que hay que saber de los interruptores en rpgmaker es que funcionan muy parecido a un interruptor de la vida real.
Pueden estar encendidos, (ON) o apagados (OFF), y nada más.

Además, existen dos tipos de interruptores, los interruptores generales y los interruptores locales.

El interruptor local solo servirá para señalizar que ha ocurrido algo dentro de un evento en el mapa, y por tanto activar un interruptor local en el evento 1 por ejemplo no significará que esté activado el mismo interruptor local en el evento 2.
Existen 4 interruptores locales… A, B, C, y D.

El interruptor a secas o interruptor general servirá para señalizar algo de forma global, por lo que si activas el interruptor 1 en el evento 1, el interruptor estará activado para el evento 1, 2, 3… y todos.



Por defecto, como es de esperar, están apagados.  

Variables:

Las variables, al contrario que los interruptores, NO tienen la opción de apagado y encendido.
Las variables serían como contadores, sus valores son siempre números enteros, aunque en este caso pueden ser negativos y positivos. (Por ejemplo, -521, -20, 0, 50, 834…).



Por defecto, su valor es de 0.
Y ahora tú dirás:
Todo eso está muy bien pero… ¿De qué me sirven los interruptores y las variables?

Cómo funcionan los interruptores:

Activar un interruptor en un evento es como poner un punto de control que diga… “¡Ha ocurrido algo!”, con lo que es una forma de hacer que cuando el jugador interactúe con el evento que tiene la activación del interruptor, quede registrado que realmente ha interactuado con ese evento.

Veamos un ejemplo para entenderlo mejor:

Imaginemos que queremos crear un nuevo evento de un personaje que dé el arma inicial a nuestro personaje…

Primero creamos un evento, y le damos un sprite de un personaje cualquiera. Añadimos algo de texto si queremos, y después le ponemos que le dé un arma…
Tras eso tendríamos un evento parecido a esto:



Como podréis ver al hacer el evento y probarlo… cada vez que hablemos con él nos dará el arma, una y otra vez, ¡con lo que conseguiríamos armas iguales infinitas! Pero…. Como no es lo que queremos, sino que una vez nos la dé no nos la dé más, debemos usar interruptores.

En este caso, imaginemos que sólo queremos que deje de darnos el arma, por lo que el método más fácil será utilizar un interruptor local.
Activamos el interruptor local A, o cualquier otro…

Paso a paso:
Haciendo click derecho en la pantalla del evento insertar -> opciones de interruptor local -> interruptor local A -> Activar -> Aceptar



…y creamos una nueva página en el evento con el mismo sprite del personaje. (o copiamos la página del evento y borramos todos los comandos que no necesitamos)

Tras esto, para que funcione, tendremos que darle click a la casilla de “Interruptor local” y elegir el interruptor A, o el que hayamos elegido antes.
De esta forma, nos quedaría una segunda página de evento tal que así:



Una vez hecho esto, tendremos un evento en el que tras obtener el arma por primera vez, no volverá a darnos el arma después.

Sin embargo… este interruptor local sólo afectará a la progresión con este evento, y no es un interruptor que valga para marcar “requerimientos” o progresión con otros eventos diferentes. Para eso, debemos usar un interruptor general.

Siguiendo con el anterior ejemplo… imaginemos que queremos hacer ahora que el haber interactuado con el evento anterior sea el requerimiento para poder cruzar por la única salida que hay.

Como el interruptor local que utilicemos antes sólo marca la progresión con el evento de antes… tenemos que usar un interruptor general.
Volvemos al evento de antes, y en la primera página le añadimos un interruptor al que llamaremos para este ejemplo “Viejo pasado”.

Hacemos click derecho en alguna parte por encima de la activación del interruptor local que hemos puesto antes… y añadimos el interruptor.



Paso a paso:
(Insertar->opciones de interruptor->individual (click en la caja de interruptores en los tres puntos “…”)->Clic en un lugar en blanco y escribimos en el apartado de nombre “viejo pasado”, o cualquier cosa que nos dé una pista de qué hace el interruptor->Aceptar)

Tendremos entonces algo parecido a esto:



Ahora, crearíamos otro evento obstaculizando nuestro paso por la única salida posible.

Volvemos a crear un evento… y añadimos un conditional branch (condiciones y efectos/separación condicional, la primera opción bajo la sección de control de flujo en la primera página al crear un nuevo comando en el evento) al nuevo evento.

Como condición que deba cumplirse, elegimos el interruptor que hemos creado… ¡y ya está!

Paso a paso:
(Insertar -> Condiciones y efectos -> Interruptor “viejo pasado” o el que hayas puesto antes -> Elegir que esté en activar/activado/ON)

Tras esto, tendremos una rama condicional, en la cual deberemos especificar qué ocurrirá si el interruptor que hemos creado está activado, y qué ocurrirá en caso de que no lo esté.
Los comandos que ocurrirán si está activado el interruptor estarán en la parte de arriba de la rama condicional, y los que ocurrirán en caso de que no se cumpla la condición especificada, debajo de “excepción”.

Si para este ejemplo queremos que nos bloquee el paso una planta que cortaremos con la espada que nos ha dado el viejecillo del evento anterior…
Damos al evento el sprite de una planta, en opciones le ponemos la opción de “Dirección fija” para que no cambie al interactuar con ella desde otros ángulos, y le ponemos algo de diálogo si le da cuando ha hablado y cuando aún no ha hablado con el primer evento.

Tras esto, creamos una nueva página para este evento, y la dejamos en blanco, con la prioridad por debajo de los personajes en esta segunda página para que al cambiar a esta segunda página podamos andar sobre el evento, y sin olvidar darle a la condición del interruptor local que debemos recordar haber activado en la primera página.

Opcional:
Puedes poner como activador un proceso paralelo de la segunda página y añadir la opción de borrar evento temporalmente para evitar más carga de ram en el juego, ya que el evento sigue en el mapa cargándose, aunque no tenga imagen ni la vayamos a usar más.

Tras esto, nos quedaría lo siguiente en este evento:



Al darle la condición de que si no está activado el interruptor de viejo pasado no se elimine el evento, hacemos que hasta que el personaje no hable con el evento del viejo que es el que activa ese interruptor, no pueda salir del lugar.

Por último, respecto a interruptores… Imaginemos que queremos hacer que tras cortar el seto que hemos creado, y al salir de ese mapa a otro y volver reaparezca el seto.

O lo que es lo mismo…. ¿Cómo desactivar un interruptor local de un evento desde otro evento diferente?

Algunos pensarían que hace falta algún script externo o algo así… pero en realidad NO hace falta un script para esto.
Siguiendo con el ejemplo anterior, añadiríamos al evento de teletransporte entre mapas (preferiblemente lo añadiríamos al del otro mapa desde el cual nos transportaremos de vuelta al que queremos reponer el seto) el siguiente script call (llamada de script):

Código:
$game_self_switches[[mapa, evento, 'Interruptor local']] = valor

Donde:

Mapa -> ID del mapa. (número de mapa que aparece arriba en propiedades de mapa)*
Evento - > ID del evento. (número de evento que aparece arriba al abrir la pantalla de comandos del evento)*
Interruptor local -> Puede ser A,B,C o D, y debe estar entre “, o entre '.
Valor -> true para activar el interruptor local, o false para desactivarlo.**

*El número de mapa o evento NO debe tener 0’s delante… es decir, si el ID del mapa es 002, tu sólo debes escribir 2.
**Es importante utilizar TODO minúsculas al poner true o false.

P.Ej:
Si el evento del seto al cual queremos desactivar su interruptor local A es el evento 16 del mapa 2…

$game_self_switches[[2, 16, 'A']] = false

(Para hacer una llamada de script, al añadir un nuevo comando en la ventana del evento, elegir la tercera pestaña, en avanzados, script)

Este sería una llamada de script interna del juego, no dependiente de otros script que debamos añadir… por lo que vale en cualquier proyecto de ACE.

Cómo funcionan las variables:

Las variables sirven como forma de medir la progresión poco a poco en algo.

El uso más común de las variables es cuando el personaje tiene que encontrar X número de objetos o interactuar con X número de cosas para avanzar.
Sin embargo, las variables tienen el potencial para hacer mucho más, y aquí veremos un poco las cosas que se pueden llegar a conseguir con algo de imaginación.

Pero primero, expliquemos con un ejemplo el uso más básico de las variables… imaginemos que queremos hacer que el jugador encuentre 5 cristales y los active para poder eliminar una barrera que le impide pasar a la siguiente sala.

Igual que siempre, creamos un nuevo evento, y añadimos el sprite correspondiente (en este caso un cristal).

Para este ejemplo, le pondríamos en opciones dirección fija y animación parado (direction fix y stepping animation), de forma que al interactuar con el cristal desde cualquier lado no saltará a otra dirección, pero también tendrá una animación de flote estando parado.

Después añadiríamos la variable en la caja de comandos del evento, haciendo que sumase 1 cada vez que interactúe con el cristal.

Paso a paso:
Insertar -> opciones de variable

Nos encontraríamos con un cuadro parecido a este:



Por defecto en operación estará seleccionado “sustituir” (set), lo que reemplazaría el valor que tiene la variable por el que especifiquésemos en el operando.

Esto podría sernos útil si queremos reemplazar el valor que tenga la variable por un valor concreto, como en el caso de que quisiésemos reiniciar la variable a 0.

Sin embargo, nosotros sólo queremos sumarle 1 cada vez que hable con un cristal, por lo que elegimos “sumar”.

Tras esto, tendremos un evento de cristal en el que al interactuar con el cada vez se añada 1 a la variable “cristales

Nosotros no queremos que siempre que le dé al cristal se sume 1 y se ilumine, por lo que deberíamos activar un interruptor local y añadir una nueva página con el cristal encendido.

El resultado sería el siguiente:



La razón por la que hemos hecho que le sume 1 cada vez aunque luego hacemos que no vuelva a poder añadir más es para poder copiar el evento 4 veces y añadirlos por el mapa, de forma que pudiésemos completar la misión de “encontrar los 5 cristales” del ejemplo.

Ahora, respecto al evento de la barrera que te impide pasar a no ser que tengas un valor de 5 acumulado en la variable "cristales"…
Igual que en el caso de la planta en los interruptores, habría que utilizar un conditional branch.

En este caso, sin embargo, utilizaríamos nuestra variable “cristales” en vez de un interruptor.

Elegimos como opción que sea igual al valor que decimos abajo en constante de 5, y tendremos algo así:



Opcional:
Si sólo queréis que el evento haga algo cuando la condición se cumple, quitad la opción de “añadir excepción si no se aplican las condiciones” en la parte baja de la ventana del conditional branch, y así los comandos de evento ocuparán menos espacio visible dando el mismo resultado

Tras esto, ya podremos añadir lo que ocurrirá cuando se cumpla la condición. En caso de que queramos que la barrera se desactive inmediatamente después de activar al último cristal… sólo tenemos que hacer que el evento esté con activador en proceso paralelo.

De esta forma, el evento seguirá comprobando que la condición se cumple hasta que salte a otra página del evento.

Así, añadimos el interruptor local dentro del conditional branch, y creamos otra página en blanco en el evento con prioridad por debajo del jugador, y así cuando se cumpla, la barrera se desactivará y desaparecerá.

Esta es la función más común de las variables… sin embargo, existen otras.

Para ver las siguientes, pondremos de ejemplo un minijuego en un casino.

El minijuego consiste en que hay que adivinar qué número ha salido en la ruleta (para simplificar el ejemplo, diremos que en esta ruleta sólo hay un color, y que el número más alto en la ruleta es el 20).

En primer lugar, crearíamos un evento con el NPC que nos permitirá jugar al minijuego… y después añadiríamos una variable nueva después de la opción de que el jugador quiera jugar.

En esta variable, usaríamos la operación “sustituir”, ya que será la que contenga el número que vamos a aleatorizar para el número que saldrá en la ruleta, de forma que nos quedaría algo así:



De esta forma, esta variable elegirá aleatoriamente un número entre 0 y 20, y lo guardará como su valor numérico.

Una vez tenemos el valor que saldrá en la ruleta, debemos luego añadir una variable para el número que diga el jugador para así luego poder comparar ambas… por lo que añadimos la opción de “entrada numérica” de la primera pestaña de añadir comando al evento.



En la ventana que nos saldrá, deberemos elegir una variable diferente a la elegida para la ruleta, y en nuestro caso, dar dos dígitos, ya que el máximo número posible de la ruleta es de dos dígitos.

Tras esto, podríamos añadir algún efecto de sonido moviendo la ruleta, etc… y después un conditional branch.

En este conditional branch, haríamos que se comparase la variable del número dicho por el jugador con la variable del valor aleatorio de la ruleta.
Como se muestra en la siguiente imagen:



De esta forma, si la condición se cumple, ganará dinero, y si no, le dirán que le han timado como a un chino.

Si además queremos añadir una ganancia de dinero que varíe según lo que ha apostado… ¡También podemos hacerlo con variables!

Al principio de la opción de si quiere jugar a la ruleta, deberíamos haber dado la opción de cuantas quiere apostar… lo cual deberemos guardar en otra variable.
En este caso, guardaremos este valor con el comando “entrada numérica” con el nombre “fichas apostadas”.

Una vez hecho esto… tenemos que comprobar que realmente el jugador tiene el número de fichas que ha apostado, o si nos está intentando timar a nosotros… con lo que utilizaremos una cuarta variable para este minijuego para contabilizar el número de fichas que tiene.

En este caso, al iniciar una variable, el operando será datos del juego… al darle doble click, o en los tres puntos en la parte derecha “…” te abrirá una nueva ventana en la que te dejará elegir qué quieres guardar en la variable sobre información general del juego.



Ahí tendrás varias opciones entre las que elegir… Si quieres que guarde el ID de algún personaje del equipo, el dinero, las batallas realizadas, las coordenadas de X del personaje o de algún evento, las coordenadas de Y, la vida del enemigo, el nivel del personaje… etc.

Sin embargo, lo que nos interesa a nosotros es que registre el número de “fichas” que tiene en su posesión el jugador.
De esta forma, elegimos la opción de “objetos” o ítems, y elegimos las fichas del casino o de la ruleta.

Tras esto, aceptamos… y solo quedaría hacer una comprobación con un conditional branch de que el número que nos dice el jugador de fichas que apuesta es igual o menor que el que tiene en su posesión comparando las últimas dos variables que hemos creado.

En caso de que se cumpla le quitamos el número de objetos puestos en la variable de “fichas apostadas”, puede seguir el minijuego, y en caso de que gane, sólo quedaría ir a opciones de variable.



Tras esto, haremos por ejemplo que al ganar, se multiplique el número de fichas apostadas por 3, con lo que iríamos a opciones de variable, haríamos que ahora se multiplicase por tres, y por último haríamos que le diese las fichas con la opción de cambiar ítems según la variable “fichas apostadas” una vez ya ha sido multiplicado.

El resultado final del evento un poco pulido sería algo tal que así:



Cómo hacer que pase algo cuando el personaje o un evento pasan por una región determinada:

Por último ya en este tutorial, quedaría poder hacer que un evento que está andando por una zona concreta o por una región ocurra algo, al igual que si el personaje esté andando por una región.

Para ello, primero necesitamos dos variables que guarden las coordenadas X e Y del personaje o evento en cuestión.
Si te has leído el tutorial hasta este punto… ¡Ya deberías saber cómo hacerlo!

Para esta parte utilizaremos como ejemplo un evento en el que el personaje se pueda caer por un agujero a la habitación de abajo. Con este método, podremos hacer que el personaje se caiga por un agujero sin necesidad de poner eventos en todos los tiles del borde del agujero.

En primer lugar, crea un evento en algún lugar que no moleste que se active por proceso paralelo.
Después, crea una nueva variable a la que llamaremos por ejemplo “Jugador X”, elige en operación datos del juego, y en la ventana que sale elige personaje -> jugador ->Mapa X.
Con esto conseguiríamos que el evento con el que estamos trabajando obtenga la coordenada X de nuestro jugador.

Tras esto, haz lo mismo para la coordenada Y, llamándola “Jugador Y” por ejemplo.

Una vez ya tenemos estas coordenadas siendo obtenidas constantemente por el evento en proceso paralelo… tenemos que decirle que obtener la región a la que corresponden esas coordenadas de nuestras variables.

Esto se puede hacer entrando en la tercera pestaña de la introducción de comandos del evento.

En la sección de “mapa”, el último botón llamado “obtener posición…” es el que tenemos que pulsar.

Una vez ahí, veremos una ventana como esta:



Por defecto vendrá seleccionado en opción de etiqueta del terreno en tipo de información, y de “especificar directamente” en posición, las cuales debemos cambiar a “región ‘ID’” en tipo de información, y a “especificar por variable” en posición.

Una vez hecho eso, especificamos las variables que hemos obtenido antes, poniendo la variable del jugador X en la coordenada X y la Y en la Y (¡Sentido común!).
Deberemos elegir una variable en la que guardar la información de región. Para este ejemplo, la llamaremos “Región ID”
Y… ¡Aceptar!

Como ya habrás podido adivinar… lo único que queda ya sería hacer un conditional branch en el que pondrás lo que ocurrirá cuando el personaje pise la región especificada.
Pero… para eso primero hay que especificar una región.
Paso a paso:

Entramos en modo de editado de región pulsando el botón al lado de la visión de mapa de eventos, y pintamos el agujero del mapa con cualquier número.


Para este ejemplo, lo pintaremos con el número 1.
Lo siguiente sería cambiar en la pasabilidad del tile que usemos para el agujero a pasable.

Paso a paso:
Herramientas -> base de datos -> tilesets

Por último, volveríamos al evento y haríamos el conditional branch, diciéndole que la variable donde hemos guardado la región debe ser igual a 1 para este ejemplo para que ocurra lo que pondremos ahora, ya que es el número de región que hemos usado para el agujero.

Con esto, ya solo quedaría añadir el efecto o lo que pasará tras que el personaje pise el agujero.

Añadimos una espera de 10 frames para que parezca que el personaje se ha acercado al borde del agujero, y después ponemos un sonido de caída y un comando de teletransporte a la sala de abajo.

El evento tendría el siguiente aspecto:



Y... ¡Hasta ahí el tutorial!

Si queréis una demo de lo que se ha hecho para inspeccionar las cosas y verlo mejor, aquí está:
mediafire.com download/wzbobb1r4clbfn8/Demo_tutorial.exe
avatar
BreinLand entertainment
Soñador
Soñador

0/3

Créditos 210

Gracias : 49

Volver arriba Ir abajo

RPG Maker VX ACE Re: [ACE][Tutorial]Interruptores, variables y conditional branches

Mensaje por Bleuw el 2016-08-23, 18:47

Wow, tremendo tutorial te mandaste, con montones de fotos y hasta con demo final.
Y no solo de interruptores, si no también de variables que es con lo que más se complica la gente, sobre todo al principio.

No tengo mucho que decir, se nota que le pusiste mucho tiempo y dedicación al tutorial y quedó perfecto. Seguro le servirá a varios para resolver sus dudas o para iniciarse con una suerte de guía.

En fin, saludos.
avatar
Bleuw
Aventurero
Aventurero

0/3

Créditos 1608

Gracias : 102

Volver arriba Ir abajo

RPG Maker VX ACE Re: [ACE][Tutorial]Interruptores, variables y conditional branches

Mensaje por Dariel Lopez el 2016-08-23, 21:26

Te felicito por el tutorial y te doy las gracias BreinLand entertainment porque está muy bien ilustrado y explicado, y sin duda alguna este es el tutorial mejor explicado que he visto.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 586

Gracias : 30

Volver arriba Ir abajo

RPG Maker VX ACE Re: [ACE][Tutorial]Interruptores, variables y conditional branches

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.