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 3766 miembros registrados.
El último usuario registrado es stranger2525.

Nuestros miembros han publicado un total de 85800 mensajes en 12217 argumentos.

[XP][Tutorial]Basic Window Manipulation RGSS

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP][Tutorial]Basic Window Manipulation RGSS

Mensaje por xXIsrael0499Xx el 2017-02-24, 16:53

Hoy Hablaremos De la Manipulación Básica de las Windows Ventanas.
La mayoría de las ventanas se crean mediante la especificación de cuatro valores a la misma X, Y, Ancho y Altura.
X e Y define la ubicación del lugar donde se colocará la Ventana. Siendo  X es horizontal, e Y es vertical.
Los Otros Dos Valores Serian width y height. Siendo Width Anchura y Height Altura.
En los Scripts Windows Una Ventana Se Genera a partir Del Comando:

Código:
super(x, y, width, height)

Cuando haces una ventana ésta debe depender de la clase interna Window.
En concreto, casi siempre depende de Window_Base, y ésta depende de Window.
Ejemplo A: class Window_Help < Window_Base
Ejemplo B: class Window_Base < Window

Hay Otras Formas De Modificar los Valores... ( x,y,Width,Height)

Código:
    self.x = x
    self.y = y
    self.width = width
    self.height = height

Siguiendo Con lo De modificar las Ventanas Hay Ciertos Comandos que Quizás Te Interesen:


  1. self.windowskin = RPG::Cache.windowskin("Nombre") Con este Comando podéis especificar que windowskin queréis que tenga tu ventana.

    Ej:



  2. self.z = 100 Con este Comando podéis Elegir que objeto En este Caso Ventana Tiene mas Altura.

    Ej:



  3. self.back_opacity = 255 Este Comando Sirve para Decidir la Opacidad Del plano de Atrás Del Windoskin.

    Ej:



  4. self.opacity = 255 Este Comando Sirve para Decidir la Opacidad Del Windoskin.

  5. self.contents_opacity Este Comando Sirve para la opacidad del contenido (texto, cursor...)

  6. self.visible = true/false Este Comando Sirve para que la ventana sea visible o no directamente, independientemente de su opacidad.


Ejemplos De Modificaciones:


Ejemplo #1 Cutre

Supongamos Que Estamos Modificando la Scene_Menu Y queremos que la ventana Del Tiempo Este en Otro Lugar..
Tomando  En cuenta Estos Comando Básicos:
Código:
Scene_Menu Linea 42 - 44
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 224
Si analizamos Este Pedazo de Código Para Modificar X Ventana Tenemos que poner @NombreDelaVentana.Método = Valor  "Así que Tomando En Cuenta los Códigos" que os Di Tenemos Esto:

Código:
   @playtime_window = Window_PlayTime.new
    @playtime_window.x = 460
    @playtime_window.y = 0
    @playtime_window.z = 1000
    @playtime_window.windowskin = RPG::Cache.windowskin("RattyV2")
    @playtime_window.back_opacity = 164
    @playtime_window.opacity = 200

Windowskin Utilizada En este Tutorial:


Ejemplo # 2

Modificando El Menú Del Maker (Básico)


Ok...Haremos Un Menú Extremadamente Básico  En El Cual pondremos a prueba los conocimientos adquiridos anteriormente...También explicare O Tratare algunas Cosas que me faltan Sobre las Ventanas...En pocas palabras Su contenido...Refresh

Resultado:

Imagen De Referencia:

Primer Paso:

Abrimos el Editor de Script, Copiamos la Scene_Menu y la pegamos Encima De Main, Nos Dirigimos a la Linea 41, y Borramos de la 41 - 48 y luego DESPUES de borra esas lineas borramos las actuales 45 asta la 48.Luego nos Dirigimos ala parte que Dice Dispose of windows.

Código:
   # Dispose of windows
    @command_window.dispose
    @playtime_window.dispose
    @steps_window.dispose
    @gold_window.dispose
    @status_window.dispose

Y eliminamos las ventanas que ya no utilizamos...Quedaría así:

Código:
   # Dispose of windows
    @command_window.dispose
    @gold_window.dispose

Hacemos el Mismo Proceso en Frame Update

Código:
 def update
    # Update windows
    @command_window.update
    @gold_window.update
    # If command window is active: call update_command
    if @command_window.active
      update_command
      return
    end
    # If status window is active: call update_status
    if @status_window.active
      update_status
      return
    end
  end

Luego Nos Dirigimos A Main Processing y Colocamos @spriteset = Spriteset_Map.new.
De esta manera:

Código:
 #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    @spriteset = Spriteset_Map.new
    # Make command window
    s1 = $data_system.words.item
    s2 = $data_system.words.skill
    s3 = $data_system.words.equip
    s4 = "Estado"
    s5 = "Guardar"
    s6 = "Salir"

Luego Nos Dirigimos a # Dispose of windows y colocamos @spriteset.dispose...y te preguntaras para que todo esto? Pues Simple El @spriteset = Spriteset_Map.new Es para que aparezca el mapa de fondo...¿Porque Ponemos?  @spriteset.dispose No agas tantas Preguntas y ponlo...

Código:
   # Dispose of windows
    @command_window.dispose
    @gold_window.dispose
    @spriteset.dispose

Luego Nos Dirigimos a Frame Update (when command window is active) y nos dispondremos a modificar

Código:
     when 1  # skill
     when 2  # equipment
     when 3  # status

Borramos Cada Uno de su contenido y Agregamos esto:

Código:
     when Numero  # Nombre
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Nombre.new
Que quedaría Así:
      when 1  # skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Skill.new
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Equip.new
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        $scene = Scene_Status.new

Verifica Si Todos Los Comandos Al abrir el Menú te Funcionan...
Seguimos...Nos Dirigimos a Make gold window y modificamos Su contenido Por este.

Código:
   # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 0
    @gold_window.opacity = 0

Ahora nos Disponemos a Ubicar la ventana de Comandos..
Nos Vamos a la Parte Que Dice:

Código:
   @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index

Y lo Cambiamos Por este:

Código:
   @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.index = @menu_index
    @command_window.x = 240
    @command_window.y = 120

Segundo Paso:

Tomamos Un respiro Yo lo necesito XD...
Y nos Disponemos A crear una ventana Con un Texto para generar este Efecto...

Imagen De Referencia:

Bueno Creamos Una Clase Encima De Scene_Menu Osea Dentro del Script yo lo haré así pero se puede hacer Como un Script Aparte...

Código:
#--------------------------------------------------------------------------
# * Create Window Tex
#------------------------------------------------------------------------

class Window_tex < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 370, 130)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.font.size = 70
    self.contents.draw_text(0, 0, 342, 130, "Juego En Pausa")
  end
end

Me Detengo Aquí para explicar de Forma Sencilla Que es Un Draw...
Los términos draw imprimen en pantalla X cosa… (No cualquier cosa solo lo que esta agregado Window_Base)

Seguimos  Warrior
Ahora nos Dirigimos a Scene_Menu Que QUE CREAMOS y Donde esta Make gold window añadiremos esto...

Código:
   # Make gold window
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 0
    @gold_window.opacity = 0
    # Make Text
    @text_window = Window_text.new
    @text_window.x = 140
    @text_window.y = 0
    @text_window.opacity = 0

Por Ultimo Nos nos olvidemos de poner en Dispose of windows...esto:

Código:
   # Dispose of windows
    @command_window.dispose
    @gold_window.dispose
    @spriteset.dispose
    @text_window.dispose

Hacemos esto igualmente en update

Código:
   # Update windows
    @command_window.update
    @gold_window.update
    @text_window.update

Esto Ultimo no se si es Totalmente Necesario Pero Hay esta..XD
Y por Fin esta listo...El Menú Un poco Cutre Si...PERO recuerden esto es un ejemplo de lo que podéis hacer..Intentare poner mas ejemplos un poco mas currados...
Resultado En Script:

Resultado En Script:
#--------------------------------------------------------------------------
# * Create Window Tex
#------------------------------------------------------------------------

class Window_text < Window_Base
 #--------------------------------------------------------------------------
 # * Object Initialization
 #--------------------------------------------------------------------------
 def initialize
   super(0, 0, 370, 130)
   self.contents = Bitmap.new(width - 32, height - 32)
   refresh
 end
 #--------------------------------------------------------------------------
 # * Refresh
 #--------------------------------------------------------------------------
 def refresh
   self.contents.clear
   self.contents.font.color = normal_color
   self.contents.font.size = 70
   self.contents.draw_text(0, 0, 342, 130, "Juego En Pausa")
 end
end
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu
 #--------------------------------------------------------------------------
 # * Object Initialization
 #     menu_index : command cursor's initial position
 #--------------------------------------------------------------------------
 def initialize(menu_index = 0)
   @menu_index = menu_index
 end
 #--------------------------------------------------------------------------
 # * Main Processing
 #--------------------------------------------------------------------------
 def main
   @spriteset = Spriteset_Map.new
   # Make command window
   s1 = $data_system.words.item
   s2 = $data_system.words.skill
   s3 = $data_system.words.equip
   s4 = "Estado"
   s5 = "Guardar"
   s6 = "Salir"
   @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
   @command_window.index = @menu_index
   @command_window.x = 240
   @command_window.y = 120
   # If number of party members is 0
   if $game_party.actors.size == 0
     # Disable items, skills, equipment, and status
     @command_window.disable_item(0)
     @command_window.disable_item(1)
     @command_window.disable_item(2)
     @command_window.disable_item(3)
   end
   # If save is forbidden
   if $game_system.save_disabled
     # Disable save
     @command_window.disable_item(4)
   end
   # Make gold window
   @gold_window = Window_Gold.new
   @gold_window.x = 480
   @gold_window.y = 0
   @gold_window.opacity = 0
   # Make Text
   @text_window = Window_text.new
   @text_window.x = 140
   @text_window.y = 0
   @text_window.opacity = 0
   # Execute transition
   Graphics.transition
   # Main loop
   loop do
     # Update game screen
     Graphics.update
     # Update input information
     Input.update
     # Frame update
     update
     # Abort loop if screen is changed
     if $scene != self
       break
     end
   end
   # Prepare for transition
   Graphics.freeze
   # Dispose of windows
   @command_window.dispose
   @gold_window.dispose
   @spriteset.dispose
   @text_window.dispose
  end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
   # Update windows
   @command_window.update
   @gold_window.update
   @text_window.update
   # If command window is active: call update_command
   if @command_window.active
     update_command
     return
   end
   # If status window is active: call update_status
   if @status_window.active
     update_status
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when command window is active)
 #--------------------------------------------------------------------------
 def update_command
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Switch to map screen
     $scene = Scene_Map.new
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # If command other than save or end game, and party members = 0
     if $game_party.actors.size == 0 and @command_window.index < 4
       # Play buzzer SE
       $game_system.se_play($data_system.buzzer_se)
       return
     end
     # Branch by command window cursor position
     case @command_window.index
     when 0  # item
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to item screen
       $scene = Scene_Item.new
     when 1  # skill
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Skill.new
     when 2  # equipment
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Equip.new
     when 3  # status
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       $scene = Scene_Status.new
     when 4  # save
       # If saving is forbidden
       if $game_system.save_disabled
         # Play buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to save screen
       $scene = Scene_Save.new
     when 5  # end game
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to end game screen
       $scene = Scene_End.new
     end
     return
   end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when status window is active)
 #--------------------------------------------------------------------------
 def update_status
   # If B button was pressed
   if Input.trigger?(Input::B)
     # Play cancel SE
     $game_system.se_play($data_system.cancel_se)
     # Make command window active
     @command_window.active = true
     @status_window.active = false
     @status_window.index = -1
     return
   end
   # If C button was pressed
   if Input.trigger?(Input::C)
     # Branch by command window cursor position
     case @command_window.index
     when 1  # skill
       # If this actor's action limit is 2 or more
       if $game_party.actors[@status_window.index].restriction >= 2
         # Play buzzer SE
         $game_system.se_play($data_system.buzzer_se)
         return
       end
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to skill screen
       $scene = Scene_Skill.new(@status_window.index)
     when 2  # equipment
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to equipment screen
       $scene = Scene_Equip.new(@status_window.index)
     when 3  # status
       # Play decision SE
       $game_system.se_play($data_system.decision_se)
       # Switch to status screen
       $scene = Scene_Status.new(@status_window.index)
     end
     return
   end
 end
end


Extras:


Código:
self.contents.font.name = ""  Comando Para elegir Fuente De Ventana
self.contents.font.size = Valor Tamaño De Fuente de la Ventana
$game_system.windowskin_name = 'nombre' Elegir  Windowskin desde llamar Script

Agradecimientos:
Wecoc "Por aportar Mas Información y explicar algunas cosas que no estaban del todo claras"

Demo y Mas Ejemplos Próximamente

Tema Sujetado A Cambios  Pendiente Actualización

Nota: Si tienes Algún Comando Que me Falto Mencionar.. No olvides Comentarlo...Se agradece Tu apoyo...

PD: Se agradece Tu Comentario e Like...que anima Bastante... Warrior


Última edición por xXIsrael0499Xx el 2017-02-26, 10:18, editado 5 veces
avatar
xXIsrael0499Xx
Principiante
Principiante

0/3

Créditos 1095

Gracias : 56

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Tutorial]Basic Window Manipulation RGSS

Mensaje por Segio Luis el 2017-02-24, 20:16

Muy buen aporte isra pero solo queda una pregunta:
¿todo esto que explicaste es solo para XP?
avatar
Segio Luis
Novato
Novato

3/3

Créditos 91

Gracias : 12

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Tutorial]Basic Window Manipulation RGSS

Mensaje por Wecoc el 2017-02-24, 21:47

Segio Luis: Todo lo que ha puesto (de momento) sirve para VX y Ace excepto la línea RPG::Cache.windowskin(nombre) que iría un poco distinta. Aún así RGSS y RGSS3 no son lo mismo así que te recomiendo si quieres aprender a scriptear cosas para RPG maker VX Ace centrarte en RGSS3, o te harás un lío.

-------------------

Está bastante bien, es básico pero útil. Solo quiero hacer algunos apuntes para que lo edites y así la información esté del todo correcta.

1 - No es lo mismo super() y super(x, y, width, height)

Cuando haces una ventana ésta debe depender de la clase interna Window.
En concreto, casi siempre depende de Window_Base, y ésta depende de Window.
Ejemplo A: class Window_Help < Window_Base
Ejemplo B: class Window_Base < Window

Cuando defines un método que ya existe en su clase ancestral, normalmente querrás que haga lo que hacía la ancestral MÁS ciertas cosas nuevas. Ese "haz lo que hacía la ancestral" es lo que hace la reserved word super.
Window usa def initialize sin argumentos, mientras que Window_Base usa def initialize(x, y, width, height)
Por ese motivo, Window_Base dentro del initialize usa super() (paréntesis opcionales) pero si creas una ventana que dependa de Window_Base deberás usar
super(x, y, width, height) habiendo definido antes cada uno de esos argumentos. Window_Command usa def initialize(width, commands) así que las que dependan de Window_Command usarán super(width, commands)... y así con todo.

2 - La z no es la importancia sinó solo la altura. Que una ventana esté arriba del todo no implica que sea la que está activa, se activará con self.active = true/false

3 - self.back_opacity no es la opacidad de la windowskin en sí, sinó solo del plano de atrás de la Windowskin. self.opacity en cambio sí es la opacidad de la windowskin (sin contar su contenido).
Te dejaste self.visible = true/false para que la ventana sea visible o no directamente, independientemente de su opacidad (es distinto porque afecta al contenido de la ventana también). También existe self.contents_opacity para la opacidad del contenido (texto, cursor...) pero no se usa casi nunca.

4 - Donde pusiste RPG::Cache.windowskin(@windowskin_name) cámbialo por RPG::Cache.windowskin('nombre').
@windowskin_name no sirve de nada cambiarlo porque se está comprobando constantemente que sea igual a la windowskin general del juego, y si no lo es, es cambiada directamente de nuevo a esa.
Por lo tanto para que una ventana tenga una windowskin distinta a la del sistema hay que usar RPG::Cache.windowskin(nombre) pero no cambiar @windowskin_name.
Por otra parte la windowskin del juego se cambia con $game_system.windowskin_name = 'nombre'

Saludos.
avatar
Wecoc
Administrador
Administrador



Créditos 9371

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Tutorial]Basic Window Manipulation RGSS

Mensaje por xXIsrael0499Xx el 2017-02-25, 16:39

Actualización

2017.02.25

Mas Ejemplos
Imagenes Pocas Pero Tiene
Mas Contenido E Información arreglada. Entre Comillas XD

@Wecoc Gracias Por Corregir algunas Cosas Y aclarar Ciertos Puntos..Se agradece el Apoyo..

Próxima Actualización Dios Sabe Cuando..XD
avatar
xXIsrael0499Xx
Principiante
Principiante

0/3

Créditos 1095

Gracias : 56

Volver arriba Ir abajo

RPG Maker XP Re: [XP][Tutorial]Basic Window Manipulation RGSS

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.