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

Nuestros miembros han publicado un total de 84767 mensajes en 12064 argumentos.

[XP] Funciones Extra para Draw Text

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Funciones Extra para Draw Text

Mensaje por Wecoc el 2016-10-24, 17:47

Éste script añade las siguientes funciones extra para el mostrado de textos:

- Cambiar o ampliar fácilmente los colores de mensaje \c[n] (se pueden cambiar a medio juego, los cambios se guardan al guardar partida)
- Cambiar o ampliar fácilmente los colores de texto del sistema (lo mismo que el anterior)
- Definir k e r n i n g (separación personalizada de los textos) como propiedad nueva de la font.
- Fijar la separación entre cada letra (similar a fuentes como Courier New)

Es compatible con otros cambios de draw_text siempre que usen alias. Si no usan alias Funciones Extra para Draw Text debe quedar debajo del otro.

No requiere créditos.
Las instrucciones vienen en el script.
ATENCIÓN! No quitar los comentarios del script

Código:
#==============================================================================
# * [XP] Funciones Extra para Draw Text
#==============================================================================
# Autor: Wecoc (no requiere créditos)
#------------------------------------------------------------------------------
#
# 1a. Cómo cambiar o ampliar los colores de mensaje \c[n] por defecto
#       Se definen en set_default_colors; @text_colors[ID] = (color)
#
# 1b. Cómo cambiar o ampliar los colores de mensaje \c[n] a medio juego
#       Llamada de script: $game_system.text_colors(ID) = (color)
#       Ejemplo: $game_system.text_colors(2) = Color.new(128, 128, 255, 255)
#
# 2a. Cómo cambiar o ampliar los colores de texto del sistema por defecto
#       Hay que definirle el nombre en la global DEFAULT_COLORS
#       Después solo se define la nueva variable en set_default_colors detrás
#       de los que ya hay definidos
#
# 2b. Cómo cambiar los colores del texto del sistema por defecto a medio juego
#       Llamada de script: $game_system.(nombre) = (color)
#       Ejemplo: $game_system.crisis_color = Color.new(255, 255, 64, 255)
#
# 3a. Cómo definir el kerning (separación entre letras) del texto por defecto
#       Busca la línea del script: @kerning = 1.0 y cambias 1.0 por otro valor
#
# 3b. Cómo definir el kerning de un texto concreto
#       Justo antes del draw_text define el kerning de la fuente así:
#       self.contents.font.kerning = (valor)
#
#------------------------------------------------------------------------------
# ATENCIÓN! No quitar los comentarios del script
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # Define aquí los nombres de los colores de texto
  DEFAULT_COLORS = [:normal, :disabled, :system, :crisis, :knockout]
  #--------------------------------------------------------------------------
  attr_accessor :text_colors
  for c in DEFAULT_COLORS
    eval("attr_accessor :#{c.to_s}_color")
  end
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  alias window_base_colors_ini initialize unless $@
  def initialize
    window_base_colors_ini
    set_default_colors
  end
  #--------------------------------------------------------------------------
  # * Definir colores de texto
  #--------------------------------------------------------------------------
  def set_default_colors
    @text_colors = []
    # Colores de mensaje de texto \c[n]
    @text_colors[0] = Color.new(255, 255, 255, 255)
    @text_colors[1] = Color.new(128, 128, 255, 255)
    @text_colors[2] = Color.new(128, 128, 255, 255)
    @text_colors[3] = Color.new(128, 255, 128, 255)
    @text_colors[4] = Color.new(128, 255, 255, 255)
    @text_colors[5] = Color.new(255, 128, 255, 255)
    @text_colors[6] = Color.new(255, 255, 128, 255)
    @text_colors[7] = Color.new(192, 192, 192, 255)
    # Colores de texto del sistema
    @normal_color   = Color.new(255, 255, 255, 255)
    @disabled_color = Color.new(255, 255, 255, 128)
    @system_color   = Color.new(192, 224, 255, 255)
    @crisis_color   = Color.new(255, 255,  64, 255)
    @knockout_color = Color.new(255,  64,   0, 255)
  end
  #--------------------------------------------------------------------------
  # * Obtener un color \c[n] según su ID
  #--------------------------------------------------------------------------
  def text_color(n)
    set_default_colors if @normal_color.nil?
    color = @text_colors[n]
    color = @normal_color if color == nil
    return color
  end
  #--------------------------------------------------------------------------
  # * Atajo a los colores de sistema definidos
  #--------------------------------------------------------------------------
  for c in DEFAULT_COLORS
    eval("
    def #{c.to_s}_color
      set_default_colors if @#{c.to_s}_color.nil?
      return @normal_color if @#{c.to_s}_color.nil?
      return @#{c.to_s}_color
    end#")
  end
end

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

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Obtener un color \c[n] según su ID
  #--------------------------------------------------------------------------
  def text_color(n)
    return $game_system.text_color(n)
  end
  #--------------------------------------------------------------------------
  # * Atajo a los colores de sistema definidos
  #--------------------------------------------------------------------------
  for c in Game_System::DEFAULT_COLORS
    eval("
    def #{c.to_s}_color
      return $game_system.#{c.to_s}_color
    end#")
  end
end

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

class Font
  attr_reader :kerning
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  alias kerning_ini initialize unless $@
  def initialize(*args)
    kerning_ini(*args)
    @kerning = 1.0
  end
  #--------------------------------------------------------------------------
  # * Kerning (Separación del texto)
  #--------------------------------------------------------------------------
  def kerning=(kerning)
    @kerning = kerning.to_f
  end
end

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

class Bitmap
  
  # Modo Kerning (Separación de texto)
  KERNING_MODE = true
  # Fijar la misma separación entre todas las letras
  KERNING_AUTO_WIDTH = false
  #--------------------------------------------------------------------------
  # * Draw Text
  #--------------------------------------------------------------------------
  alias kerning_draw_text draw_text unless $@
  def draw_text(*args)
    return kerning_draw_text(*args) if KERNING_MODE == false
    if args[0].is_a?(Rect) # draw_text(rect, str[, align])
      x = args[0].x
      y = args[0].y
      width = args[0].width
      height = args[0].height
      text = args[1]
      align = args[2] ; align = 0 if align == nil
    else # draw_text(x, y, width, height, str[, align])
      x = args[0]
      y = args[1]
      width = args[2]
      height = args[3]
      text = args[4]
      align = args[5] ; align = 0 if align == nil
    end
    w = 0 ; dx = 0
    case align
    when 1 # Centrado
      if KERNING_AUTO_WIDTH
        auto_text = "A" * text.size
        total_width = (self.text_size(auto_text).width * self.font.kerning).floor
      else
        total_width = (self.text_size(text).width * self.font.kerning).floor
      end
    when 2 # Derecha
      text = text.reverse
    end
    for t in text.scan(/./)
      if KERNING_AUTO_WIDTH
        w = self.text_size("A").width
      else
        w = self.text_size(t).width
      end
      dw = (w * self.font.kerning).floor
      next if w == 0
      return if (dx + w) > width
      case align
      when 0 # Izquierda (defecto)
        kerning_draw_text(x + dx, y, w + 4, height, t, 1)
      when 1 # Centrado
        cx = width / 2 - total_width / 2
        kerning_draw_text(x + dx + cx, y, w + 4, height, t, 1)
      when 2 # Derecha
        kerning_draw_text(x + width - dw - dx, y, w + 4, height, t, 1)
      end
      dx += dw
    end
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 9217

Gracias : 493

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.