设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2002|回复: 0
打印 上一主题 下一主题

[已经过期] 请问这个字体脚本可以插入第三种字体吗??

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1109
在线时间
110 小时
注册时间
2016-8-7
帖子
97
跳转到指定楼层
1
发表于 2017-11-24 21:15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
rt



#encoding:utf-8
#==============================================================================
# ■ [PS0]双默认字体
#        Draw_Text_DF
#------------------------------------------------------------------------------
#  对 Bitmap.draw_text 进行了重定义。
#------------------------------------------------------------------------------
#   若检测为纯中文,则使用默认字体;
#   若检测为纯英文,则使用另一套字体。
#   若检测结果为中英文混杂,则逐字描绘。
#==============================================================================
# [更新记录]
#    - 2012.01.27 By 各种压力的猫君
#      * 新写法自定义匹配更直观;
#      * 更改一些语句的执行顺序以优化效率;
#      * 重写基础x坐标获取方法,以兼容非等宽字体;
#      * BUILD2: 修正基础x坐标的一处笔误
#    - 2012.01.26 By 各种压力的猫君
#      * 修正居中及居右坐标计算错误
#    - 2012.01.25 By 各种压力的猫君
#      * 重写逐字描绘方法,修正当对齐方式不为0时的错误
#    - 2012.01.23 By 各种压力的猫君
#      * 初版
#------------------------------------------------------------------------------
# [使用方法]
#    - 插入到MAIN以上即可。
#==============================================================================
$_PS0 = {} if $_PS0 == nil  
$_PS0["Draw_Text_DF"] = 20120127.2
#==============================================================================
# [PS0] 通用配置模块  
#==============================================================================
module PS0
  module Draw_Text_DF

    # 是否对str做前检测(若设定为false则一直使用逐字描绘/两次描绘)
    DO_PRE_CHECK = true

    # 默认字体(在这里指定了就不要再在MAIN里指定了)
    Font.default_name = "方正兰亭粗黑_GBK"

    # 英文字体
    ENG_FONT = "Monotype Corsiva"


    # 作用范围
    # 0:全部字体
    # 1:仅默认字体(即特殊指定的除外)
    DO_CHANGE = 1

    # 中英文混排时的描绘方式
    # 0:逐字描绘
    # 1:分段描绘
    DRAW_TYPE = 0

    # 自定义匹配
    # 若不需要符号请将REG2、REG3清空但保留外侧半角双引号
    REG1 = "0-9A-Za-z "                 # 数字、大小写字母、半角空格
    REG2 = ";:?!@#%^&*(){}[]=-+_/|,.<>" # 一般符号
    REG3 = "\"\'\$\\"                   # 特殊符号(要在前面加"\")

    # 生成真正的正则式(若不清楚切勿随意修改下一行)
    REG = /[#{REG1 + (REG2+REG3).gsub!(/./) { "\\" + $& }}]/

  end
end
#==============================================================================

class Bitmap
  #--------------------------------------------------------------------------
  # ● Draw text
  #--------------------------------------------------------------------------
  alias old_draw_text draw_text
  def draw_text(*args)
  #--------------------------------------------------------------------------
  # 当特殊字体且设定为不对特殊字体进行替换时,直接调用原有方式
  if self.font.name != Font.default_name && PS0::Draw_Text_DF::DO_CHANGE == 1
    old_draw_text(*args)
  else
  #--------------------------------------------------------------------------
    # 记录默认字体
    last_font_name = self.font.name
    # 获取参数
    if args[0].is_a?(Rect)
      rect, str, align = args[0..2]
      x, y, width, height = rect.x, rect.y, rect.width, rect.height
    else
      x, y, width, height, str, align = args[0..5]
    end
    str = str.to_s
    align = 0 if align.nil?
    # 执行前检测
    if PS0::Draw_Text_DF::DO_PRE_CHECK == true
      if str.scan(PS0::Draw_Text_DF::REG).size == 0 # 纯中文
        old_draw_text(*args)
      elsif str.scan(PS0::Draw_Text_DF::REG).size == str.size # 纯英文
        change_to_eng_font
        old_draw_text(*args)
      else
        case PS0::Draw_Text_DF::DRAW_TYPE
        when 0 ; draw_text_1by1(x, y, width, height, str, align)
        when 1 ; draw_text_npass(x, y, width, height, str, align)
        end
      end
    else
      case PS0::Draw_Text_DF::DRAW_TYPE
      when 0 ; draw_text_1by1(x, y, width, height, str, align)
      when 1 ; draw_text_npass(x, y, width, height, str, align)
      end
    end
    # 还原默认字体
    self.font.name = last_font_name
  end # <- 检测特殊字体
  end
  #--------------------------------------------------------------------------
  # ○ 逐字描绘
  #--------------------------------------------------------------------------
  def draw_text_1by1(x, y, width, height, str, align)
    # 记录默认字体
    last_font_name = self.font.name
    # 临时变量(x坐标偏移量)
    ox = 0
    # 根据不同对齐方式计算基础x坐标
    if align == 0 # 居左
      bx = x
    else
      # 分离两种字体对应的str以实现非等宽字体的长度识别
      str1 = str.clone.gsub!(PS0::Draw_Text_DF::REG)            { "" }
      str2 = str.clone.gsub!(/(?!#{PS0::Draw_Text_DF::REG})./)  { "" }
      str_width = text_size(str1).width
      change_to_eng_font
      str_width += text_size(str2).width
      case align
      when 0 # 居左
        bx = x
      when 1 # 居中
        bx = x + (width - str_width) / 2
      when 2 # 居右
        bx = x + (width - str_width)
      end
    end
    # 给字符串结尾添加特殊符号
    str += "\P"
    # 提取单个文字
    while (!(c = str.slice!(/./m)).nil?)
      # 还原默认字体
      self.font.name = last_font_name
      # 当满足正则匹配则替换字体
      change_to_eng_font if c.slice(PS0::Draw_Text_DF::REG)
      # 把前面的特殊符号删去(兼容Window_Command类的矩形选框)
      if c == "\P"
        c = ""
      else
        # 调用原方法
        old_draw_text((bx + ox), y, width, height, c, 0)
        # 横坐标偏移量
        ox += text_size(c).width
      end
    end
  end
  #--------------------------------------------------------------------------
  # ○ 变更为英文字体
  #--------------------------------------------------------------------------
  def change_to_eng_font
    self.font.name = PS0::Draw_Text_DF::ENG_FONT
  end
end



您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-17 15:32

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表