¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [XP][Tutorial]Basic Window Manipulation RGSS el Vie Feb 24, 2017 6:31 pm

Reputación del mensaje :100% (4 votos)

xXIsrael0499Xx

avatar
Este Tuto Es Original De Mundo Maker
Autor: Mi Persona "xXIsrael0499Xx"
Pagina Original: Tutorial
Ago Esto Con el Objetivo De reunir Información para Futuras Generaciones.


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 Ópalo Sonrisa Grande...
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..Ópalo Sonrisa Grande
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...



Última edición por xXIsrael0499Xx el Dom Feb 26, 2017 11:22 am, editado 2 veces

#2 Re: [XP][Tutorial]Basic Window Manipulation RGSS el Sáb Feb 25, 2017 2:45 pm

Ledai

avatar
Gracias por el aporte! Me servirá por si algún día necesito revisarlo y aprender!!! ^_^

ya tienes mi 1º Ópalo Reputación Espero que te toquen muchos más!




Entérate de todas las novedades

#3 Re: [XP][Tutorial]Basic Window Manipulation RGSS el Sáb Feb 25, 2017 5:47 pm

xXIsrael0499Xx

avatar

Actualización







 2017.02.25

Mas Ejemplos
Imagenes Pocas Pero Tiene
Mas Contenido E Información arreglada. Entre Comillas Ópalo Sonrisa Grande

@Ledai Se agradece el Apoyo..Animo A Aprender...Ópalo Sonrisa Grande   Ópalo Aplaudiendo

@Cuervoso Muchas Gracias Por el Apoyo...Ópalo Sonrisa Grande

@Tomate Muchas Gracias por el Apoyo...
En la próxima actualización tomare en cuenta tu recomendación...
PD: Si soy humano...Ópalo Sonrisa Grande

Próxima Actualización Dios Sabe Cuando..Ópalo Sonrisa Grande



Última edición por xXIsrael0499Xx el Jue Mar 09, 2017 8:05 pm, editado 3 veces

Cuervoso

avatar
Debo decir que te ha quedado bastante bien organizado el tutorial, muchas gracias por compartirlo con nosotros. A pesar de que no utilizo el XP, siempre es bueno aprender cosas nuevas, así en un futuro podemos ayudar a alguien que tenga dudas con ello.

Ópalo Reputación

Hasta luego.






Cuervoso! No te pases ¬_¬

Tomate

avatar
Spoiler:


¡Hola Israel!

Muy buen tutorial con imágenes. Te felicito por el buen conocimiento y manejo de programación en RGSS que tienes. Es digno de admirar. Ópalo Reputación

¿Podría hacerte una recomendación? Al menos en los tutoriales o temas importantes, te agradecería si amablemente escribes sin utilizar las mayúsculas "En Cada Palabra"porque me confunde un poco y resulta incómodo leer así. Solo eso, de paso le da mayor seriedad a tu escrito. Ópalo Guiño

Bueno, de todos modos,muchas gracias por tu gran aporte. Ópalo Contento

Contenido patrocinado


Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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