14 de septiembre de 2012

RGSS Básico - Capítulo 3 (a): Haciendo ventanas


Buenas, hoy vamos a trabajar con un nuevo tutorial de RGSS Básico sobre variables, operacionales y ventanas. Estará dividido en dos partes para no alargar mucho esto (a y b).

Empecemos por lo primero: ¿qué son las ventanas?

Las ventanas son cada uno de los recuadros que vemos por el maker: en el menú, en los diálogos, etc. (esto creo que ya lo expliqué en algún momento o tengo un déjà vu). Estas ventanicas deben ser llamadas desde algún lado, porque no aparecen por arte de magia en nuestros menús. Si tenemos una ventana en donde hemos puesto class Window_Pepe, para llamarla bastaría con definir una variable así:

@ventana = Window_Pepe.new

Las ventanas son una clase especial de cualquier maker y deben hacerse teniendo en cuenta varias cosas. Todas las ventanas que aparecen predefinidas son como hijas de Window_Base (ya predefinida en el maker), la cual contiene métodos que son usados en muchas otras ventanas. Por lo que si nos vamos a muchas de las ventanas ya definidas por el maker veremos que su clase está definida así:

class Window_Help < Window_Base

Así Window_Help usará métodos de Window_Base como draw_actor_name y no ocurrirá ningún error.

Además, Window_Base hereda atributos de Window, una super clase implícita en el RPG Maker XP y a la que no puedes acceder tan fácilmente. Puedes ver su código y funciones en la ayuda del maker.

Las ventanas son llamadas por las escenas (Scene_Menu, Scene_Shop, etc), que son las que muestran el conjunto de ventanas, por ejemplo en el menú.

Las estructuras de las Window (ventana) deben componerse como mínimo de dos métodos que jamás pueden faltar: def initialize y def refresh. El primero crea la ventana (cuando se llama con el método .new) y el segundo escribe su contenido.

Si necesitáramos por cualquier razón universal, actualizar algún contenido de la ventana debemos crear otro método más, un método update. Dentro de este update debemos hacer un llamamiento al método refresh para volver a escribir el nuevo contenido (y algunas cosas más).

Tranquilidad, vamos por pasos para entender todo esto. Visualicemos el Window_Gold (que es la ventana más simplona del maker):


NOTA: Este es el esqueleto que cualquier ventana debe tener:

class Mi_ventana < Window_Base

   def initialize
      super(x, y, ancho, alto)
      self.contents = Bitmap.new(width - 32, height - 32)
      refresh
   end

   def refresh
       self.contents.clear
   end

end

La sentencia super al iniciar nuestra ventana se encarga de especificar la
posición con respecto al eje X (el margen vertical izquierdo), la posición con respecto del eje Y (margen horizontal superior), el ancho y el alto de la ventana.

Con self.contents = Bitmap.new(width - 32, height - 32) definimos el contenido (contents) de la propia ventana (por eso usamos self, para referirnos a la misma ventana) como objeto Bitmap. Las letras width y height vienen del ancho y alto de la ventana respectivamente.

Con self.contents.clear, que limpia la ventana de textos e imágenes, dejándola como una ventana nueva y vacía. Tras esto podemos empezar a dibujar los contenidos de nuestra ventana.

Un ejemplo del método update lo vemos en Window_PlayTime, la ventana que en el menú va dibujando el tiempo que pasa:


Como es algo que debe estar actualizándose con el paso del tiempo debemos utilizar super sin ningún argumento y luego el refresh para volver a dibujar lo que va cambiando.

Cada vez que necesitemos escribir cualquier cosa en nuestra ventana debemos utilizar self.contents seguido de alguno de los métodos que haya definidos en Window_Base (debajo de update) y en la clase Bitmap (utiliza la ayuda del maker y busca Bitmap para obtener más información). Esto debe ir en refresh, que es lo que dibujará nuestra ventana. Básicamente, hay que tener en cuenta eso, pero no os preocupéis que trataremos todas (o casi todas) las posibilidades creando una bonita ventana en la segunda parte de este tutorial.

Como en la segunda parte vamos a poner chorradas en nuestra ventana, vamos a aclarar algo muy importante: los operacionales.

Son simplemente símbolos que hacen operaciones (sumar, restar, dividir, multiplicar...):


+ : signo de suma
 - : signo de resta
 * : signo de multiplicación
 / : signo de división
 ** : signo de elevación a un exponente
 % : signo de resto de división

  • Calculando la raíz de un número: la raíz cuadrada de 2 es lo mismo que 2^1/2 (2 elevado a 1/2), por lo tanto la raíz x de un número i se escribiría: i**(1/x)
  • Porcentaje: el 50% de 24 se obtiene como 24*(50/100), por lo que el porcentaje x del número i es: i*(x/100)
  • Valor absoluto: es el valor de un número siempre en positivo, basta con poner (número).abs
  • Sumar (o restar) un valor a una variable: sería la variable num que queremos que vaya sumando 10 cada cierto tiempo. La forma lógica sería num = num +10, pero la forma más simple y fácil de hacer es num += 10.
Y hasta aquí el tutorial, próximamente tendrán la parte (b) donde vamos a profundizar en estos conceptos creando una ventana, por lo que será un tutorial práctico 99%. En ella le vamos a añadir imágenes, datos, textos y poco más.

ÍNDICE DE TUTORIALES DE RGSS:
  1. Conceptos básicos
  2. Hola Mundo en RGSS
  3. Haciendo ventanas (1)
  4. Haciendo ventanas (2)

ESTO ES UN TUTORIAL ORIGINAL NO COPIES, DISTRIBUYE Y ACREDITA A SUS VERDADEROS AUTORES

Creative Commons License

No hay comentarios:

Publicar un comentario

ATENCIÓN: Tu comentario aparecerá cuando sea aceptado.