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

Nuestros miembros han publicado un total de 84723 mensajes en 12058 argumentos.

[XP] Sprite Timer mejorado

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Sprite Timer mejorado

Mensaje por Eron el 2013-09-03, 04:45

Heeeyyyy.

Este script permite hacer algunas cosas con el Sprite Timer que hasta ahora no se podian hacer, como cambiar la font y la posición cuando quieras, pausarlo, sumarle un tiempo ...

Código:
#==============================================================================
# ** Sprite_Timer Mejorado
#------------------------------------------------------------------------------
# Autor: Eron
#------------------------------------------------------------------------------
# Para usarlo a parte de con los comandos de siempre,
# desde Llamar Script podéis usar éstos métodos directamente:

# timer.set(time[, x, y, show_numbers, font_name, font_size, [red, green, blue[,alpha]] ])
#     Ejemplo 1: timer.set(5)
#     Ejemplo 2: timer.set(10, 0, 0)
#     Ejemplo 3: timer.set(5, 5, 5, true, "Verdana", 35, [255,200,20])

# timer.time
# timer.min
# timer.sec

# timer.play # (unpause)
# timer.pause
# timer.stop
# timer.reset

# timer.pause?

# timer.add_time(value)

# timer.x
# timer.font
# timer.size
# timer.color

# timer.x = x
# timer.font = font
# timer.size = size
# timer.color = [red, green, blue[, alpha]]

# timer.show_numbers
# timer.show_numbers = true / false
#==============================================================================

class Scene_Map
  attr_reader :spriteset
end
class Scene_Battle
  attr_reader :spriteset
end

class Spriteset_Map
  attr_reader :timer_sprite
end
class Spriteset_Battle
  attr_reader :timer_sprite
end

class Interpreter
  def timer
    return $scene.spriteset.timer_sprite
  end
  def command_124
    @parameters[0] == 0 ? timer.set(@parameters[1]) : timer.stop
  end
end

class Sprite_Timer < Sprite
  
  attr_accessor :show_numbers
  
  def initialize
    super
    @font_name = "Arial"
    @font_size = 32
    @font_color = Color.new(255,255,255)
    get_bitmap_size
    self.x = 552
    self.y = 0
    self.z = 500
    @time = -1
    @reset_time = -1
    @show_numbers = true
    @pause = false
    update
  end

  def get_bitmap_size
    self.bitmap = Bitmap.new(1,1)
    self.bitmap.font.name = @font_name
    self.bitmap.font.size = @font_size
    w = self.bitmap.text_size("00:00").width
    h = self.bitmap.text_size("00:00").height
    self.bitmap = Bitmap.new(w,h)
    self.bitmap.font.name = @font_name
    self.bitmap.font.size = @font_size
    self.bitmap.font.color = @font_color
  end
  
  def dispose
    if self.bitmap != nil
      self.bitmap.dispose
    end
    super
  end
  
#------------------------------------------------------------------------------
  
  def set(time,x=self.x,y=self.y,show_numbers=@show_numbers,font_name=@font_name,font_size=@font_size,font_color=@font_color)
    $game_system.timer_working = true
    @time = (time + 1) * Graphics.frame_rate
    @reset_time = time
    @show_numbers = show_numbers
    self.x, self.y = x, y
    self.font = font_name if font_name != @font_name
    self.size = font_size if font_size != @font_size
    self.color = font_color if font_color != @font_color
    update
  end
  
  def time
    return @time / Graphics.frame_rate
  end
  
  def min
    return time / 60
  end
  
  def sec
    return time % 60
  end
    
#------------------------------------------------------------------------------
  
  def play
    @pause = false
  end
  
  def pause
    @pause = true
  end
    
  def pause?
    return @pause
  end
  
  def stop
    @time = -1
    $game_system.timer_working = false
    return
  end
  
  def reset
    set(@reset_time)
  end
  
#------------------------------------------------------------------------------
  
  def add_time(value)
    @time += value * Graphics.frame_rate
    @time = [0, @time].max
  end
  
#------------------------------------------------------------------------------
  
  def font
    return @font_name
  end

  def font=(name)
    @font_name = name
    self.bitmap.font.name = name
  end
    
  def size
    return @font_size
  end
  
  def size=(size)
    @font_size = size
    get_bitmap_size
  end
  
  def color
    return @font_color
  end
  
  def color=(array)
    array << 255 if array.size == 3
    color = Color.new(array[0],array[1],array[2],array[3])
    @font_color = color
    self.bitmap.font.color = color
  end
    
  def update
    super
    @time -= 1 if @time > 0 and not @pause
    $game_system.timer = @time
    if $game_system.timer_working
      self.visible = @show_numbers
    else
      self.visible = false
    end
    if $game_system.timer / Graphics.frame_rate != @total_sec
      self.bitmap.clear
      @total_sec = $game_system.timer / Graphics.frame_rate
      min = @total_sec / 60
      sec = @total_sec % 60
      text = sprintf("%02d:%02d", min, sec)
      self.bitmap.draw_text(self.bitmap.rect, text, 1)
    end
  end
end
Está todo explicado en el script =DD Me da igual si me dais créditos o no por usarlo, es sencillito.
Podeis pegarlo encima de main o sustituir el que ya había, funciona de las dos maneras porque no usé alias ni quité ningún def.
avatar
Eron
Principiante
Principiante

0/3

Créditos 1285

Gracias : 54

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Sprite Timer mejorado

Mensaje por Wecoc el 2014-01-27, 19:17

He tardado 4 minutos o así en implemetar dirección al cronómetro, con una variable llamada forward. Si la cambiais a true el cronómetro irá hacia delante: 0, 1, 2... como en maker antíguos.

Ejemplo de llamada desde script:
Código:
timer.set(0)
timer.forward = true

Aquí el código:

Código:
#==============================================================================
# ** Sprite_Timer Mejorado
#------------------------------------------------------------------------------
# Autor: Eron
# -- Modificado por Wecoc --
#------------------------------------------------------------------------------
# Para usarlo a parte de con los comandos de siempre,
# desde Llamar Script podéis usar éstos métodos directamente:

# timer.set(time[, x, y, show_numbers, font_name, font_size, [red, green, blue[,alpha]] ])
#    Ejemplo 1: timer.set(5)
#    Ejemplo 2: timer.set(10, 0, 0)
#    Ejemplo 3: timer.set(5, 5, 5, true, "Verdana", 35, [255,200,20])

# timer.time
# timer.min
# timer.sec

# timer.play # (unpause)
# timer.pause
# timer.stop
# timer.reset
# timer.forward

# timer.pause?

# timer.add_time(value)

# timer.x
# timer.font
# timer.size
# timer.color

# timer.x = x
# timer.font = font
# timer.size = size
# timer.color = [red, green, blue[, alpha]]

# timer.show_numbers
# timer.show_numbers = true / false
#==============================================================================

class Scene_Map
  attr_reader :spriteset
end
class Scene_Battle
  attr_reader :spriteset
end

class Spriteset_Map
  attr_reader :timer_sprite
end
class Spriteset_Battle
  attr_reader :timer_sprite
end

class Interpreter
  def timer
    return $scene.spriteset.timer_sprite
  end
  def command_124
    @parameters[0] == 0 ? timer.set(@parameters[1]) : timer.stop
  end
end

class Sprite_Timer < Sprite
 
  attr_accessor :show_numbers
  attr_accessor :forward
 
  def initialize
    super
    @font_name = "Arial"
    @font_size = 32
    @font_color = Color.new(255,255,255)
    get_bitmap_size
    self.x = 552
    self.y = 0
    self.z = 500
    @time = -1
    @reset_time = -1
    @show_numbers = true
    @pause = false
    @forward = false # Por defecto es false
    update
  end

  def get_bitmap_size
    self.bitmap = Bitmap.new(1,1)
    self.bitmap.font.name = @font_name
    self.bitmap.font.size = @font_size
    w = self.bitmap.text_size("00:00").width
    h = self.bitmap.text_size("00:00").height
    self.bitmap = Bitmap.new(w,h)
    self.bitmap.font.name = @font_name
    self.bitmap.font.size = @font_size
    self.bitmap.font.color = @font_color
  end
 
  def dispose
    if self.bitmap != nil
      self.bitmap.dispose
    end
    super
  end
 
#------------------------------------------------------------------------------
 
  def set(time,x=self.x,y=self.y,show_numbers=@show_numbers,font_name=@font_name,font_size=@font_size,font_color=@font_color)
    $game_system.timer_working = true
    @time = (time + 1) * Graphics.frame_rate
    @reset_time = time
    @show_numbers = show_numbers
    self.x, self.y = x, y
    self.font = font_name if font_name != @font_name
    self.size = font_size if font_size != @font_size
    self.color = font_color if font_color != @font_color
    update
  end
 
  def time
    return @time / Graphics.frame_rate
  end
 
  def min
    return time / 60
  end
 
  def sec
    return time % 60
  end
   
#------------------------------------------------------------------------------
 
  def play
    @pause = false
  end
 
  def pause
    @pause = true
  end
   
  def pause?
    return @pause
  end
 
  def stop
    @time = -1
    $game_system.timer_working = false
    return
  end
 
  def reset
    set(@reset_time)
  end
 
#------------------------------------------------------------------------------
 
  def add_time(value)
    @time += value * Graphics.frame_rate
    @time = [0, @time].max
  end
 
#------------------------------------------------------------------------------
 
  def font
    return @font_name
  end

  def font=(name)
    @font_name = name
    self.bitmap.font.name = name
  end
   
  def size
    return @font_size
  end
 
  def size=(size)
    @font_size = size
    get_bitmap_size
  end
 
  def color
    return @font_color
  end
 
  def color=(array)
    array << 255 if array.size == 3
    color = Color.new(array[0],array[1],array[2],array[3])
    @font_color = color
    self.bitmap.font.color = color
  end
   
  def update
    super
    t = @forward ? 1 : -1
    @time += t if @time > 0 and not @pause
    $game_system.timer = @time
    if $game_system.timer_working
      self.visible = @show_numbers
    else
      self.visible = false
    end
    if $game_system.timer / Graphics.frame_rate != @total_sec
      self.bitmap.clear
      @total_sec = $game_system.timer / Graphics.frame_rate
      min = @total_sec / 60
      sec = @total_sec % 60
      text = sprintf("%02d:%02d", min, sec)
      self.bitmap.draw_text(self.bitmap.rect, text, 1)
    end
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 9213

Gracias : 491

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Sprite Timer mejorado

Mensaje por Wecoc el 2017-04-05, 00:52

ATENCIÓN! A todos los que estéis usando éste script de Eron, he hablado con él y coincidimos en que es muy recomendable cambiarlo por éste otro:
Wecoc's Timer Upgrade

A parte de tener varios añadidos, todos los métodos que había en el de Eron se usan igual en el mío así que lo podéis sustituir sin problema.
En el mío se arreglaron varios bugs importantes que había en el script de Eron:
- Cuando ibas al menú (o a cualquier escena) y volvías, si el temporizador estaba activo desaparecía.
- Al empezar batalla el temporizador desaparecía.
- Si hacías cambios al temporizador (fuente, estilo) y cambiabas de escena, éstos se reseteaban.
- Si guardabas el proyecto y lo volvías a cargar las características actuales del temporizador no se guardaban.
- Como no soportaba milisegundos, el modo "forward" al definir un valor directamente subía al siguiente (por ejemplo en vez de ser el segundo 0.00 lo contaba como si fuera el 0.59). Esa misma limitación causaba varios fallos parecidos, difíciles de detectar pero igualmente ahí estaban.
avatar
Wecoc
Administrador
Administrador



Créditos 9213

Gracias : 491

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Sprite Timer mejorado

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.