====== Variables e Interruptores (XP, VX, VXACE) ======
===== Las Variables =====
RPG Maker siempre incluye características en varias de sus versiones y son las variables.
A partir del RPG Maker XP se cuenta con la posibilidad de usar otro tipo de variables, las del RGSS, un derivado del Ruby, un lenguaje de programación tipo OO (Orientado a Objetos).
==== Las Variables en la interfaz gráfica (GUI) ====
Aquí las variables cumplen una función, la de guardar alguna clase de datos en la memoria hasta que ese dato sea utilizado o reemplazado por uno nuevo.
Incluye opciones como:
Definir cuántas variables se necesitarán, una o varias Asignar un valor Sumar o restar una cantidad a dicho valor Multiplicar, dividir u obtener el residuo (modulus) de tal operación empezando por el valor asignado a la variable
El tipo de valor guardado en una variable puede ser:
=== Constante ===
Un valor que no se modificará solo a no ser que uno cree un proceso que le indique a la variable que lo modifique. Los valores son numéricos o pueden ser una línea de texto o una combinación de ambos si se los transforma en arrays o hashes.
=== Variable ===
Un valor que puede modificarse solo o por medio de instrucciones dejadas por el desarrollador, pero que también puede llegar a mantenerse casi tan estable como la Constante, porque dependerá de cómo se la utilice. El motivo es que se trata de llamar a una variable idéntica a la que estamos configurando ahora y por ello puede contener sus propios valores.
=== Aleatorio o Random ===
Gracias a una opción incluida en el Ruby y en el RGSS se puede definir que se asigne un número aleatorio que varíe entre un valor mínimo y uno máximo. El resultado siempre debe variar y con ello también la forma en que afecte a las otras variables que se hayan definido o se vayan a definir.
=== Objeto / Item ===
Se le asigna como valor un objeto que se encuentre en tu base de datos y en el bolso del equipo (party) de tus héroes.
=== Actor ===
Se define cuál característica del actor (uno de los héroes de tu equipo) se almacenará.
=== Enemigo ===
Se define cuál característica del enemigo, que se define aquí mismo de entre 8 opciones, se almacenará en la variable.
=== Personaje ===
Se define qué tipo de personaje (héroe o evento) y qué opción relacionada con el mapa se van a almacenar.
=== Otros ===
Se almacena una de estas opciones: ID del mapa, los miembros de tu equipo, el dinero, los pasos, el tiempo de juego, el cronómetro y el conteo de partidas guardadas.
==== Las Variables en los scripts (RGSS) Parte 1 ===
Aquí las variables se comportan más como tales, pues son más fáciles de alterar. He aquí un ejemplo.
@command_window.index = 0
(la variable es igual al valor actual del índice de la ventana de comando o menú, que ahora está en la primera posición, la cual se define siempre como cero)
@ejemplo_de_variable = @command_window.index
(el ejemplo es igual al índice de la ventana de comando o menú)
@calcular = @ejemplo_de_variable * 5
(se incluye el ejemplo para realizar un cálculo hipotético)
Las cosas no servirían si de pronto uno hiciera esto:
@command_window.index = -1
o esto:
@command_window.dispose
[Falso] De ocurrir tal cosa, la variable del ejemplo perdería su punto de referencia y por ende todo valor que pudiera asignársele.
La variable puede incluso tener valores negativos, en el caso de una ventana de menú, esto le indica al Maker que no se debe mostrar el cursor rectangular. Una variable puede producir un error fatal solo si el scripter definió un rango de valores muy específico y no prevee una corrección para aquellos valores inferiores o superiores a los que se incluyeran en dicho rango.
De ocurrir un error es probable que el valor del ejemplo se convierta en nil (nada) y hasta que se deje de ejecutar el script en el que usas dicha variable y por ende se cierre el Maker.
==== Clases de Variables ====
=== Constantes: Yo, Tú, ÉL ===
Son variables que no se deberían alterar. Sin embargo, Ruby incluye la posibilidad de hacerlo, pues no son verdaderas constantes sino un tipo especial de variables o singletons. Se dice que se consumen menos recursos a la hora de ejecutar estas variables.
== Ejemplo ==
module Lista
Adulto = '18 años'
Adolescente = '15 años'
Nino = '10 años'
Bebe = '18 meses'
end
Cómo pueden ver ahí configuré los valores de 4 Constantes. Si quiero usarlas en cualquier otro script, ingreso una línea como esta: ''Lista::Adulto'' o ''Lista::Nino'' y automáticamente se desplegará o calculará el valor de esa Constante.
=== Globales: $ ===
Son variables que se las puede llamar desde cualquier parte, en cualquier momento. Se pueden modificar o dejar quietas (en el caso a un llamado a una función de un script que se inicialice antes de verse ''Scene_Title'' o la pantalla de título). No se alteraría en el caso de que no se desee cambiar su valor predefinido sino que se pretenda acceder a una opción dentro de dicho script.
Los arrays y los hashes pueden ser globales según las necesidades del usuario.
== Ejemplo ==
$scene = Scene_Map.new
Es una variable que usamos para cambiar de escenario y por ende su valor puede cambiar según sea necesario.
=== Instancias: @ ===
Se pueden usar en cualquier moemento en un mismo ambiente, es decir, en un mismo escenario o ventana, etc. En el caso de que fueran inicializados en algún script, esto permite simular la función de un método y permite que se lo llame múltiples veces dentro del mismo script o que se lo llame como a un método de otro (@steps = 0, $game_party.steps += 1) con ayuda de una variable global (otro ejemplo: $game_party.actors[0] o Arshes o Aluxes, @actors[index] es la instancia). Se dice que son más estables y consumen menos recursos que una variable global porque su "scope" no es tan extenso.
Cuando no son inicializados como instancias públicas, solo se pueden usar en un método específico o en métodos que sean llamados desde ese mismo método.
def un_metodo
@una_instancia = true
llamado_a_otro_metodo
end
def llamado_a_otro_metodo
p 'Fue llamado por un_metodo'
end
Los arrays y los hashes pueden ser instancias según las necesidades del usuario.
== Ejemplo ==
@command_window = Window_Command.new(192, ['Opción 1','Opción 1','Cancelar'])
=== De Clase: @@ ===
Son variables que solo se deben usar dentro de una misma clase, sea un script de game, de ventana o de escenario. Es como tener una variable global a la que se la restringe a una clase. Se pueden usar cuantas veces sea necesario. Son estables, como las instancias.
Los arrays y los hashes pueden ser variables de clase según las necesidades del usuario.
En realidad no hay un ejemplo típico, pues se tiende a usar más las instancias, pero perfectamente se pueden usar variables de clase en tales casos, excepto cuando queremos que puedan ser llamados por una variable global que permita llamar una instancia inicializada que se convierte en un pseudo método.
class Cualquiera
def un_metodo
@@hora = 0
p 'Medianoche'
end
def otro_metodos
@@hora = 12
p 'Mediodía'
p 'Cerrado (Hora del Almuerzo)'
end
def actualizar
h = $game_party.steps % 100
@@hora += 1 if h == 0
end
end
=== Locales: una_palabra_en_minusculas ===
Basta con ver el ejemplo para localizarlas en un script. Son locales porque no se las puede llamar de otro script a menos que el script actual herede características o métodos de otro script según lo que venga detrás de este símbolo ''<''.
Es el típico llamado a un método incluido en le propia clase o de la que hereda métodos.
== Ejemplo: ==
class Ventana_Ejemplo < Window_Base
def initialize(x, y, ancho, alto)
super(x, y, ancho, alto)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
self.contents.clear
mostrar_contenido
end
def mostrar_contenido
self.contents.draw_text(x, y, ancho, alto, 'Mi mensaje va aquí', alineamiento)
end
end
En ese ejemplo se puede ver que utilicé 3 variables locales. La primera es refresh que borra el contenido de la ventana, la segunda es ''mostrar_contenido'' que llama al método para que despliegue una línea de texto en pantalla, y justo ahí está la tercera, ''draw_text'', que es la que se encarga de imprimirlo y fue heredado de ''Window_Base''.
Nota: Solo es válida la herencia de una clase anterior, no de varias atrás. Si se ocupa incluir métodos de otro más atrás, se debe copiar y pegar dicho método o se lo llama por medio de una variable global.
==== Las Variables en los scripts (RGSS) Parte 2 ====
Ahora veremos qué son en realidad las variables ya incluidas en el maker, las **''$game_variables''**.
Estas son variables globales que pueden ser llamadas desde cualquier script o evento y pueden almacenar todo tipo de dato. ¿Cuáles? Las mismas que se definieron al principio de este capítulo. ¿Por qué? Porque son la versión codificada de la que aparece en la GUI.
¿Es una variable más?
No lo es. No es solo una variable global. A esta ya se le asignó una función, la de ser un array o un hash (un ordenamiento o uno asociativo por medio de la creación de keys o llaves).
Gracias a eso es que pueden guardar tanto datos numéricos como texto. Aun así solo se tiende a guardar un único valor o un único conjunto de valores a la vez, si es un array con un valor que encierre más valores dentro de ''['' '']''.
Ejemplo:
@soy_un_array = ['Lunes', 10, 'Marzo', 'del', 1500]
$game_variables[1] = @soy_un_array
p $game_variables[1]
@soy_un_hash { 10 => 'Lunes 10 de Marzo' }
p @soy_un_hash[10]
En pantalla verían esto:
['Lunes', 10, 'Marzo', 'del', 1500]
{'Lunes 10 de Marzo'}
===== Los Interruptores =====
Son variables porque se los llama así ''$game_switches[index]'' y son del tipo ''global''. Solo pueden almacenar dos valores a los que se les llama Boolean, son ''true'' o ''false'' (verdadero o falso). Hacen lo mismo que un encendido y apagado de un interruptor en una casa u oficina, activan o desactivan un evento, un script, partes de estos o lo que sea.
==== Ejemplo: ====
if $game_switches[1] == true
p 'Encendido'
else
p 'Apagado'
end