viernes, 16 de agosto de 2013

Lección 5: Dentro de una opción del menu

  Empezaremos por editar el script de la leccion 4 y haremos que por lo menos podamos ver un texto dentro de esta opción, por mientras les dejo el video de diamondandplatinum3, para los demas seguiremos aca :))


  Lo que haremos ahora es crear algo en la nueva opcion dentro del menu, por lo tanto al script de la leccion anterior, lo manejaremos denuevo y crearemos antes de él, una nueva clase, esta clase vendá heredada de la famosa scene_base, por lo que crearemos una, yo llamare a mi scene, Scene_Mono (recordar las mayus, que son importantes) y le heredare < Scene_Base.

 Una vez hecho esto, en nuestro script ya hecho llamaremos a nuestra scene, en el metodo, que hablamos tanto en la leccion anterior, el mio era command_Nuevo. Le pondremos adentro esto SceneManager.call(nombre de la clase).

 Luego de esto nos vamos al script Scene_Base, y copiaremos las partes importantes que deben tener las opciones, que son cuando empieza, lo que lleva, cuando se actualiza por cada frame, cuando esta a punto de terminar y por ultimo cuando termina, sin mucho mas atado, les pondre lo que tienen que copiar:

   def start
    create_main_viewport
  end
  #--------------------------------------------------------------------------
  # ● 開始後処理
  #--------------------------------------------------------------------------
  def post_start
    perform_transition
    Input.update
  end
  #--------------------------------------------------------------------------
  # ● シーン変更中判定
  #--------------------------------------------------------------------------
  def scene_changing?
    SceneManager.scene != self
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_basic
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新(基本)
  #--------------------------------------------------------------------------
  def update_basic
    Graphics.update
    Input.update
    update_all_windows
  end
  #--------------------------------------------------------------------------
  # ● 終了前処理
  #--------------------------------------------------------------------------
  def pre_terminate
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    Graphics.freeze
    dispose_all_windows
    dispose_main_viewport
  end


 Borraremos cosas que no nos interesaran por ahora, que serian el metodo scene_changing? y el update_basic, y todas las cosas que tienen dentro de cada de metodo que nos queda pondremos un super(), si no saben para que, vean CB IV.

 Una vez hecho esto, nos quedara asi:

  #--------------------------------------------------------------------------
  # ● 開始処理
  #--------------------------------------------------------------------------
  def start
    super()
  end
  #--------------------------------------------------------------------------
  # ● 開始後処理
  #--------------------------------------------------------------------------
  def post_start
    super()
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    super()
  end
  #--------------------------------------------------------------------------
  # ● 終了前処理
  #--------------------------------------------------------------------------
  def pre_terminate
  end
  #--------------------------------------------------------------------------
  # ● 終了処理
  #--------------------------------------------------------------------------
  def terminate
    super()
  end

  Y cuando tengamos esto, estaremos ya casi listos, pero si hacemos arrancar el juego nos dará probablemente un error o no hará nada.

 Para esto es que debemos crear la ventana y para eso usaremos una variable de metodo, que yo llamare @ventana, esta variable la pondremos cuando arranca la opcion (start) y le asignaremos la ventana, Window_Help.new

 Ahora si tendremos algo bueno, por lo menos veremos algo, pero no queda alli, ya que se quedará pegado y no podremos hacer algo más, es por esto que debemos, cuando se cierre la opcion (terminate), se cierre todo y volvamos a lo normal.

 Primero colocaremos en terminate nuestra variable, con .dispose, que llamara a esta opcion (buscar .dispose para que quede mas claro) y por lo que dejara de usar la opcion, para que retorne adonde estabamos, o sea el menu nuevamente, debemos poner un return_scene, esto permitira devolvernos al menu.

 Para esto pondremos return_scene, abajo del super() del metodo update.

 Para que nos retorne al menu al apretar una tecla, pondremos al lado del return_scene esto,
if Input.trigger? (:B), esto significa que si el usuario aprieta B (del juego, en el teclado sera X, esc , etc)
 nos devolvemos al menu original.






 Bien eso es todo lo que haremos por ahora, aunque lo mas probable es que sigamos usando este script, asi que no lo borren, po mientras les dejo el script completo, al que le agregue una cosilla, que es para que cuando nos retornemos, haga el sonido de cancelar (linea 27), intenten averiguar el porque lo puse alli, aunque es mas que obvio.

class Scene_Mono < Scene_Base

  #--------------------------------------------------------------------------
  # ● Start
  #--------------------------------------------------------------------------
  def start
    super()
    @ventana = Window_Help.new
  end
  #--------------------------------------------------------------------------
  # ● Post_start
  #--------------------------------------------------------------------------
  def post_start
    super()
  end
  #--------------------------------------------------------------------------
  # ● Update
  #--------------------------------------------------------------------------
  def update
    super()
    return_scene if Input.trigger?(:B)
  end
  #--------------------------------------------------------------------------
  # ● Pre-terminate
  #--------------------------------------------------------------------------
  def pre_terminate
    Sound.play_cancel
  end
  #--------------------------------------------------------------------------
  # ● Terminate
  #--------------------------------------------------------------------------
  def terminate
    super()
    @ventana.dispose
  end
end


#=============================================================================
#                                WINDOW
#=============================================================================


class Window_MenuCommand < Window_Command

  alias mono_windmenucomm_addorcomm_nuevopalabra  add_original_commands
  def add_original_commands
    mono_windmenucomm_addorcomm_nuevopalabra
    add_command("Nuevo",   :Nuevo,   true) # Crea solo la palabra el menu
  end

end

#=============================================================================
#                                SCENE
#=============================================================================

class Scene_Menu < Scene_MenuBase
  alias mono_scenemenu_ccw_nuevocomando create_command_window
  def create_command_window
    mono_scenemenu_ccw_nuevocomando
    @command_window.set_handler(:Nuevo,      method(:command_Nuevo))
  end

  def command_Nuevo       #~Que pasa si aprieto en la opcion                                       
    SceneManager.call(Scene_Mono)
  end

end

#=============================================================================


 Eso es todo por ahora, nos veremos más adelante, para seguir aprendiendo...




No hay comentarios:

Publicar un comentario