¡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 Ayuda con rgss3 el Vie Jul 26, 2013 9:24 pm

shinlucho

avatar
Estoy comenzando con el lenguaje de rpgmvxace, hay algunas cosas que entiendo y otras que no, estoy viendo algunos tutoriales y la ayuda oficial pero quiero asegurarme de algunas cosas.

Que diferencia hay entre module y class? Tengo entendido que en class se definen los methods pero en module no se.

Gracias por leer Ópalo Sonriente

#2 Re: Ayuda con rgss3 el Vie Jul 26, 2013 9:32 pm

rpgmanumaker

avatar
Bueno, realmente no es que sepa mucho... Así que no sé como voy a poder explicarte esto... Intentaré hacerlo lo mejor posible XD.
En las class, como has dicho, se definen los métodos de las scipt... pero los modules son totalmente diferentes (a mi parecer). En los modules se definen variables que más tarde se incorporaran al script, pero queremos que esas variables puedan ser modificadas por el usuario que vaya a usar dicha script.
Tomaré como ejemplo esta pequeña parte de un script que muestra una barra de guardar/cargar...
Código:
module MOG_LOAD_BAR
  # Tiempo para cargar. (Segundos)
  LOAD_DURATION = 3
  # Habilitar el sistema para cargar el juego.
  ENABLE_LOAD_BAR_FOR_SCENE_LOAD = true
  # Habilitar el sistema para salvar el juego.
  ENABLE_LOAD_BAR_FOR_SCENE_SAVE = true 
  # Definición de las imágenes que permanecerán en el fondo.
  LOAD_BACKGROUND_PICTURES = [
  "Background_1",
  "Background_2",
  "Background_3",
  "Background_4",
  "Background_5",
  "Background_6"
  #"Background_7",
  #"Background_8",
  #"Background_9",
  #"Background_10",
  # ...
  ]
  # Habilitar el orden secuencial o aleatorio.
  PICTURE_RANDOM_SELECTION = true 
  # Posición General de HUD.
  LOAD_BAR_POSITION = [30,350]
  # Coloque el medidor.
  LOAD_BAR_METER_POSITION = [11,27]
  # Coloque el texto.
  LOAD_BAR_TEXT_POSITION = [ 10, -3]
  # Sonido para cargar el archivo.
  LOAD_SE = "Decision2"
  # Velocida de animación del medidor
  LOAD_BAR_FLOW_SPEED = 25
  # Descripción de la situación que se activará a través del menú después de guardar.
    # Si la salvación se realiza el evento, el escenario será el mapa.
  RETURN_TO_SCENE = Scene_Menu.new(4)
  # Habilitar la animación de la levitación del texto.
  ENABLE_FLOAT_TEXT_ANIMATION = true
  # Muestra el carácter sprite.
  ENABLE_CHARACTER_SPRITE = true
  # Habilitar las barras laterales.
  ENABLE_STRIPE_SPRITE = true
  # Velocidad de las barras laterales.
  STRIPE_SPEED = 1
end
Pues cada variable (o mejor dicho constante) puede ser modificada por el usuario que vaya a usar el script sin que afecte directamente a la estructura del script... ocasionando errores. Para que veas mejor para que sirve... te dejo el script completo. Míralo bien y repasalo a conciencia para poder entenderlo.
Código:
# ================================================= ==============================
# + + + MOG - la barra de carga avanzada (v1.0) + + +
# ================================================= ==============================
# Por Moghunter
# Http :/ / www.atelier rgss.com-
# ================================================= ==============================
# Muestra una barra de carga entre las escenas de guardar y cargar.
#
# El propósito de este script es presentar algunas obras de arte de su juego
# Cuando el jugador espera que la barra de desplazamiento.
#
# ================================================= ==============================
# Se puede adpatar este script en cualquier otra escena o activar el evento.
# Sólo tiene que utilizar este código.
#
# SceneManager.call (Scene_Load_Bar)
# ================================================= ==============================

module MOG_LOAD_BAR
  # Tiempo para cargar. (Segundos)
  LOAD_DURATION = 3
  # Habilitar el sistema para cargar el juego.
  ENABLE_LOAD_BAR_FOR_SCENE_LOAD = true
  # Habilitar el sistema para salvar el juego.
  ENABLE_LOAD_BAR_FOR_SCENE_SAVE = true 
  # Definición de las imágenes que permanecerán en el fondo.
  LOAD_BACKGROUND_PICTURES = [
  "Background_1",
  "Background_2",
  "Background_3",
  "Background_4",
  "Background_5",
  "Background_6"
  #"Background_7",
  #"Background_8",
  #"Background_9",
  #"Background_10",
  # ...
  ]
  # Habilitar el orden secuencial o aleatorio.
  PICTURE_RANDOM_SELECTION = true 
  # Posición General de HUD.
  LOAD_BAR_POSITION = [30,350]
  # Coloque el medidor.
  LOAD_BAR_METER_POSITION = [11,27]
  # Coloque el texto.
  LOAD_BAR_TEXT_POSITION = [ 10, -3]
  # Sonido para cargar el archivo.
  LOAD_SE = "Decision2"
  # Velocida de animación del medidor
  LOAD_BAR_FLOW_SPEED = 25
  # Descripción de la situación que se activará a través del menú después de guardar.
    # Si la salvación se realiza el evento, el escenario será el mapa.
  RETURN_TO_SCENE = Scene_Menu.new(4)
  # Habilitar la animación de la levitación del texto.
  ENABLE_FLOAT_TEXT_ANIMATION = true
  # Muestra el carácter sprite.
  ENABLE_CHARACTER_SPRITE = true
  # Habilitar las barras laterales.
  ENABLE_STRIPE_SPRITE = true
  # Velocidad de las barras laterales.
  STRIPE_SPEED = 1
end

#=============================================================================
# ■ Game_Temp
#=============================================================================
class Game_Temp
  attr_accessor :load_bar_pre_index
  attr_accessor :loadbar_type
  attr_accessor :load_pre_bgm
  attr_accessor :load_pre_bgs
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------             
 alias load_bar_initialize initialize
 def initialize
    @load_bar_pre_index = -1
    @loadbar_type = 0 
    load_bar_initialize
 end
 
end

#=============================================================================
# ■ Game_System
#=============================================================================
class Game_System
  attr_accessor :load_bar_pre_index
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------             
 alias load_bar_initialize initialize
 def initialize
    load_bar_initialize
    @load_bar_pre_index = 0
 end
 
 #--------------------------------------------------------------------------
 # ● BGS Stop
 #--------------------------------------------------------------------------           
 def bgs_stop
    Audio.bgs_stop
 end
end

#=============================================================================
# ■ Scene Load Bar
#=============================================================================
class Scene_Load_Bar
 include MOG_LOAD_BAR
 
 #--------------------------------------------------------------------------
 # ● Initialize
 #--------------------------------------------------------------------------           
 def initialize
    @bar_type = $game_temp.loadbar_type
    @load_duration_max = 60 * LOAD_DURATION
    @load_duration_max = 60 if @load_duration_max < 60 
    @load_duration = 0
    @pictures = LOAD_BACKGROUND_PICTURES
    create_background
    create_layout 
    create_load_bar
    create_text
    create_side_strip
 end
 
 #--------------------------------------------------------------------------
 # ● Create Background
 #--------------------------------------------------------------------------         
 def create_background 
    @background = Sprite.new
    if PICTURE_RANDOM_SELECTION
        $game_system.load_bar_pre_index = rand(@pictures.size)
        no_repeat_picture
    end
    image_name = @pictures[$game_system.load_bar_pre_index]   
    image_name = "" if image_name == nil   
    @background.bitmap = Cache.picture(image_name)
    $game_temp.load_bar_pre_index = $game_system.load_bar_pre_index
    unless PICTURE_RANDOM_SELECTION
        $game_system.load_bar_pre_index += 1
        $game_system.load_bar_pre_index = 0 if $game_system.load_bar_pre_index > @pictures.size - 1
    end 
 end
 
 #--------------------------------------------------------------------------
 # ● No Repeat Picture
 #--------------------------------------------------------------------------           
 def no_repeat_picture
    if $game_system.load_bar_pre_index == $game_temp.load_bar_pre_index
        $game_system.load_bar_pre_index += 1
        $game_system.load_bar_pre_index = 0 if $game_system.load_bar_pre_index > @pictures.size - 1
    end 
 end
 
 #--------------------------------------------------------------------------
 # ● Create Layout
 #--------------------------------------------------------------------------         
 def create_layout 
    @hud = Sprite.new
    @hud.bitmap = Cache.system("Load_Bar_Layout")
    @hud.x = LOAD_BAR_POSITION[0]
    @hud.y = LOAD_BAR_POSITION[1]
    @hud.z = 10
 end
 
 #--------------------------------------------------------------------------
 # ● Create Side Strip
 #--------------------------------------------------------------------------         
 def create_side_strip
    @stripe1 = Plane.new
    @stripe2 = Plane.new   
    if @bar_type == 0
        @stripe1.bitmap = Cache.system("Load_Bar_Stripe1_L")
        @stripe2.bitmap = Cache.system("Load_Bar_Stripe2_L")
    else 
        @stripe1.bitmap = Cache.system("Load_Bar_Stripe1_S")
        @stripe2.bitmap = Cache.system("Load_Bar_Stripe2_S")
    end 
    @stripe1.z = 1
    @stripe2.z = 1         
    @stripe1.visible = ENABLE_STRIPE_SPRITE
    @stripe2.visible = ENABLE_STRIPE_SPRITE
 end
 
 #--------------------------------------------------------------------------
 # ● Create Load Bar
 #--------------------------------------------------------------------------           
 def create_load_bar
    @bar_flow = 0
    @bar_image = Cache.system("Load_Bar_Meter")
    @bar_bitmap = Bitmap.new(@bar_image.width,@bar_image.height)
    @bar_range = @bar_image.width / 3
    @bar_width = @bar_range  * @load_duration / @load_duration_max
    @bar_height = @bar_image.height
    @bar_width_old = @bar_width
    @bar_src_rect = Rect.new(@bar_flow, 0, @bar_width, @bar_height)
    @bar_bitmap.blt(0,0, @bar_image, @bar_src_rect)
    @bar_sprite = Sprite.new
    @bar_sprite.bitmap = @bar_bitmap
    @bar_sprite.z = 11
    @bar_sprite.x = LOAD_BAR_POSITION[0] + LOAD_BAR_METER_POSITION[0]
    @bar_sprite.y = LOAD_BAR_POSITION[1] + LOAD_BAR_METER_POSITION[1]
    update_bar_flow
 end
 
 #--------------------------------------------------------------------------
 # ● Create Text
 #--------------------------------------------------------------------------           
 def create_text
    @text_float_time = 0
    @text_float_y = 0
    @text_image = Cache.system("Load_Bar_Text")
    @text_bitmap = Bitmap.new(@text_image.width,@text_image.height)
    @text_width = @text_image.width
    @text_height = @text_image.height / 2
    @text_src_rect = Rect.new(0, @text_height * @bar_type, @text_width, @text_height)
    @text_bitmap.blt(0,0, @text_image, @text_src_rect) 
    @text_sprite = Sprite.new
    @text_sprite.bitmap = @text_bitmap   
    @text_fy = LOAD_BAR_POSITION[1] + LOAD_BAR_TEXT_POSITION[1]
    @text_sprite.x = LOAD_BAR_POSITION[0] + LOAD_BAR_TEXT_POSITION[0]
    @text_sprite.y = @text_fy
    @text_sprite.z = 12
 end
 
 #--------------------------------------------------------------------------
 # ● Main
 #--------------------------------------------------------------------------         
 def main
    Graphics.transition
    execute_loop
    execute_dispose
 end 
 
 #--------------------------------------------------------------------------
 # ● Execute Loop
 #--------------------------------------------------------------------------         
 def execute_loop
    loop do
          Graphics.update
          update
          if SceneManager.scene != self
              break
          end
    end
 end
 
 #--------------------------------------------------------------------------
 # ● Execute Dispose
 #--------------------------------------------------------------------------           
 def execute_dispose
    @hud.bitmap.dispose
    @hud.dispose
    @stripe1.bitmap.dispose
    @stripe1.dispose   
    @stripe2.bitmap.dispose
    @stripe2.dispose       
    @bar_image.dispose
    @bar_bitmap.dispose
    @bar_sprite.bitmap.dispose
    @bar_sprite.dispose   
    @background.bitmap.dispose
    @background.dispose
    @text_image.dispose
    @text_bitmap.dispose
    @text_sprite.bitmap.dispose
    @text_sprite.dispose
    Graphics.transition
    Graphics.freeze
 end 
 
 #--------------------------------------------------------------------------
 # ● Update
 #--------------------------------------------------------------------------           
 def update
    update_bar_flow
    update_bar_duration
    update_float_text
    update_slide_stripe
 end
 
 #--------------------------------------------------------------------------
 # ● Update Slide Stripe
 #--------------------------------------------------------------------------             
 def update_slide_stripe
    @stripe1.oy += STRIPE_SPEED
    @stripe2.ox += STRIPE_SPEED
 end 
 
 #--------------------------------------------------------------------------
 # ● update_float_text
 #--------------------------------------------------------------------------           
 def update_float_text
    return unless ENABLE_FLOAT_TEXT_ANIMATION
    @text_float_time += 1
    case @text_float_time
        when 1..10
          @text_float_y += 1
        when 11..20
          @text_float_y -= 1
        else
          @text_float_y = 0
          @text_float_time = 0
    end
    @text_sprite.y = @text_fy + @text_float_y
 end
 
 #--------------------------------------------------------------------------
 # ● Update Bar Flow
 #--------------------------------------------------------------------------           
 def update_bar_flow
    @bar_sprite.bitmap.clear
    @bar_width = @bar_range  * @load_duration / @load_duration_max
    @bar_width = @bar_range if @load_duration > @load_duration_max
    @bar_src_rect = Rect.new(@bar_flow, 0,@bar_width, @bar_height)
    @bar_bitmap.blt(0,0, @bar_image, @bar_src_rect)
    @bar_flow += LOAD_BAR_FLOW_SPEED
    if @bar_flow >= @bar_image.width - @bar_range
        @bar_flow = 0   
    end
 end 
 
 #--------------------------------------------------------------------------
 # ● Update Bar Duration
 #--------------------------------------------------------------------------             
 def update_bar_duration
    @load_duration += 1
    if @load_duration == @load_duration_max
        Audio.se_play("Audio/SE/" + LOAD_SE,100,100) rescue nil
    elsif @load_duration == @load_duration_max + 10
        if @bar_type == 0
            SceneManager.return
            $game_system.replay_bgm
        else 
            SceneManager.return 
        end 
        $game_temp.loadbar_type = false
    end
 end 
 
end

#=============================================================================
# ■ Scene Save
#=============================================================================
class Scene_Save < Scene_File
 
 #--------------------------------------------------------------------------
 # ● On Save Sucess
 #--------------------------------------------------------------------------               
  alias mog_advloadbar_on_save_success on_save_success
  def on_save_success
      mog_advloadbar_on_save_success
      $game_temp.loadbar_type = 1
      SceneManager.call(Scene_Load_Bar)   
  end
 
end

#=============================================================================
# ■ Scene Load
#=============================================================================
class Scene_Load < Scene_File
 
  #--------------------------------------------------------------------------
  # ● On Load Success
  #--------------------------------------------------------------------------
  alias mog_advloadbar_on_load_success on_load_success
  def on_load_success
      mog_advloadbar_on_load_success
      $game_system.save_bgm     
      RPG::BGM.stop
      $game_temp.loadbar_type = 0
      SceneManager.call(Scene_Load_Bar)             
  end
end

$mog_rgss3_advanced_load_bar = true

#3 Re: Ayuda con rgss3 el Vie Jul 26, 2013 10:14 pm

shinlucho

avatar
Muchas gracias, de a poco voy entendiendo algunas cosas y me van surgiendo otras dudas.

Otra cosa que vi es que los modulos pueden contener def self.algo, tambien son metodos?

Y una ultima cosa para molestar (por ahora), para que sirven los alias?

#4 Re: Ayuda con rgss3 el Vie Jul 26, 2013 10:23 pm

rpgmanumaker

avatar
Eso de los def self.algo dentro de los métodos no sé para que sirve... y tampoco nunca los he visto.
Los alias serían como la re-escritura de un método de forma que se conserve lo que hace dicho método más lo que vayas a añadir a dicho método.
Vamos a coger esta parte del script y te explicaré como funciona.
Código:
alias load_bar_initialize initialize
 def initialize
    @load_bar_pre_index = -1
    @loadbar_type = 0 
    load_bar_initialize
 end
 
end
Bueno, vamos a explicar línea por línea.
alias load_bar_initialize initialize (primero pones el método alias, seguido del alias (sobre-nombre) y el método que quieres modificar.
def initialize aquí tendrías que poner el método que vas a modificar... osea, initialize.
@load_bar_pre_index = -1 (pues despuñes dentro del método añades la nueva función que quieres integrar a dicho método (en este caso initialize)
@loadbar_type = 0
load_bar_initialize
end
Tal vez no lo entiendas... porque, para ser sincero, incluso a mí me ha costado entenderlo tal y como lo he escrito XD. Pero mis conocimientos son bastante limitados... así que a duras penas puedo ofrecerte una mejor explicación XD. Bueno, si me he equivocado en algo (aunque creo que no) espero que alguien me corrija.

#5 Re: Ayuda con rgss3 el Vie Jul 26, 2013 10:44 pm

shinlucho

avatar
Tengo una idea, pero no entendi del todo xD.

Por ejemplo, tengo el siguiente metodo:

Código:
def primero
 printf("hola mundo!")
end

y despues utilizo un alias:

Código:
alias segundo primero
 def primero
  printf("hola universo!")
 end
end

Se van a mostrar los dos textos o el segundo texto va a reemplazar al primero?

#6 Re: Ayuda con rgss3 el Vie Jul 26, 2013 10:56 pm

orochii

avatar
La diferencia entre los módulos y las clases más notable es que al usar un módulo no necesitas "instanciarlo", es decir, hacer un objeto de éste para acceder a sus propiedades. Digamos que un módulo es una clase global.

Digamos que tienes la siguiente clase.
Código:
class Algo
  def initialize
    @a = "a"
  end
  def asdf
    print @a
  end
end
Para acceder a esa clase, tendrías que hacer algo como ésto:
Código:
algo = Algo.new
algo.asdf

Con un módulo en cambio, no existe ni hay necesidad de usar el .new y de hecho hay que hacer dicho método a mano (le llamaremos init en nuestro módulo de ejemplo).
También nota que cualquier método que quieres que pueda ser usado fuera del módulo mismo, debes ponerle "self." al principio.
Código:
module Alga
  def init
    @a = "a" if @a==nil
  end
  def self.asdf
    init
    print @a
  end
end
Como verás, dicho módulo tiene dos métodos dentro. El método "init" sólo puede ser usado dentro del módulo, mientras que "asdf" puede ser llamado desde fuera de la siguiente manera:
Código:
Alga.asdf
Como verás, no es necesario crear un objeto Alga como en el caso de la clase Algo que hicimos antes.

Y esa es la razón por la que se usan los métodos para las configuraciones de los scripts. Porque te permite tomar valores desde fuera del metodo, sin hacerle instancias y estarlas referenciando desde cada lugar desde donde te entre en gana de usarlo xD. Más exactamente, se usan para encapsular un montón de valores constantes:
Código:
module ConstantesRandom
  CONSTANTE1 = "asdf"
  DEBEN_EMPEZAR_CON_MAYUSCULA = "pueden llevar números"
  PERO_NO_EMPEZAR_CON_NUMERO = "y tampoco signos raros"
  EXCEPTO_COSAS_COMO__ESO_XD = 23
  TAMBIEN_PUEDES_GUARDAR = Array.new
  O_HASTA_COSAS_RARAS_COMO = RPG::Armor.new
  Y_no_estoy_seguro_del_limite_de_caracteres_en_el_nombre_pero_en_fin_tu_prueba_xD = "1"
end

Saludos,
Orochii Zouveleki

=============

EDIT: En el ejemplo que mostraste, se mostrará sólo el segundo texto. Para que se muestren ambos debes hacer una llamada al otro sobrenombre.
Código:
alias segundo primero
 def primero
  segundo
  printf("hola universo!")
 end
end
Cuando usas un alias, lo que haces es hacer una copia de un método bajo un "sobrenombre". Al final en tu ejemplo, al menos en términos prácticos xD, la PC tendría algo como ésto xD.
Código:
class TuClase
 def primero
  segundo
  printf("hola universo!")
 end
 def segundo
  printf("hola mundo!")
 end
end
Hiciste una copia de primero, llamándole segundo. Y luego reescribiste a primero. Es como si tuvieras una hoja, sacases una copia, y luego borrases la original y le escribieras encima.

#7 Re: Ayuda con rgss3 el Vie Jul 26, 2013 11:09 pm

shinlucho

avatar
Ahora me quedo mas claro lo que son los modulos y alias jeje, por ahora ya estoy conforme luego seguire molestando xD.

Muchas gracias a los dos! Ó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.