查看: 2464|回复: 1

[已经解决] 请教关于描绘颜色转义符的相关问题。

[复制链接]
梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
回帖
1074
发表于 2018-4-7 21:52:56 | 显示全部楼层 |阅读模式

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

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

×
也不知道该怎么说明比较好。
就是在一个新的帮助窗口使用转移符描绘部分文字颜色。
但是这个帮助窗口已经是按字描绘的。
就是想让逐个字描绘的效果跟更改颜色的效果共存。
脚本如下:
[pre lang="ruby"]class Window_Help2 < Window_Base
  #--------------------------------------------------------------------------
  # * 物件初始化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 544, WLH + 48)
    self.opacity = 0
  end
  #--------------------------------------------------------------------------
  # ● 设置文本
  #     text  : 窗口显示的字符串
  #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  #--------------------------------------------------------------------------
    def set_text(text, align = 0)
    # 如果文本和对齐方式的至少一方与上次的不同
    if text != @text or align != @align
      self.contents.clear
      self.contents.font.color = normal_color
  #  text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  #  loop do
  #    c = text.slice!(/./m)
  #    case c
  #    when nil
#      break
#      when "|"
#       @text_pos[:x] = 0
  #      @text_pos[:y] += 24
#     when "\x01"
#       text.sub!(/\[([0-9]+)\]/, "")
#       self.contents.font.color = text_color($1.to_i)
#       next
#     else
#       self.contents.font.color = normal_color
#     end
#   end
      # 初始化文本数组
      @text_array = text.split("")
      #记录文本位置
      @text_pos = {:x=>0,:y=>0}
      @text = text
      @align = align
      @actor = nil
    end
    self.visible = true
  end
  #--------------------------------------------------------------------------
  # ● 逐个字开始描绘
  #--------------------------------------------------------------------------
  def play_onetext
  tx = @text_array.shift  #获取并删除文字数组第一个字。
  cw = contents.text_size(tx).width #获取描绘这个字需要的宽度。
  if @text_pos[:x] + cw > Helpset::Width_MAX   #如果描绘的坐标X加上宽度超过 xxx ,就换行。
      @text_pos[:x] = 0
      @text_pos[:y] += 24    #假如行距是 32 。
  end
  self.contents.draw_text(@text_pos[:x], @text_pos[:y], cw, 32, tx)  #描绘这个文字。
  @text_pos[:x] += cw   #宽度累加。
end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def update
  play_onetext if @text_array && @text_array.size > 0 && Graphics.frame_count % Helpset::Move == 0
  end
end[/pre]
这是没加转义符的例图:
360截图20180407214351249.png
但为什么加了转义符之后帮助窗口就不显示内容了?
360截图20180407215132812.png

难道是我的写法出了什么问题吗?
请前辈们帮助我,指导我,谢谢。
一个只会简单事件的Rm新人,脚本完全不懂。只求做个简单的游戏完成自己的游戏之梦而已。
第一个游戏已经完成,等待各素材的完成和测试。

老鹰

梦石
40
星屑
37812
在线时间
7091 小时
注册时间
2012-5-26
回帖
3297

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

发表于 2018-4-7 22:53:01 | 显示全部楼层
本帖最后由 百里_飞柳 于 2018-4-7 22:54 编辑
  1. #--------------------------------------------------------------------------
  2. # ● 逐个字开始描绘
  3. #--------------------------------------------------------------------------
  4. def play_onetext
  5.   tx = @text_array.shift  #获取并删除文字数组第一个字。
  6.   cw = contents.text_size(tx).width #获取描绘这个字需要的宽度。
  7.   if @text_pos[:x] + cw > Helpset::Width_MAX   #如果描绘的坐标X加上宽度超过 xxx ,就换行。
  8.       @text_pos[:x] = 0
  9.       @text_pos[:y] += 24    #假如行距是 32 。
  10.   end
  11.   self.contents.draw_text(@text_pos[:x], @text_pos[:y], cw, 32, tx)  #描绘这个文字。
  12.   @text_pos[:x] += cw   #宽度累加。
  13. end
复制代码

你这里是把文字拆成了一个个的字符并进行绘制,而如果你想加入转义符的话,那就再在这之间加入个判定
以及,你这个split后的 \  符号变成什么了,是 \\ 还是 \e ,如果字符串是 '' 形式,则为 \\,否则我ruby里测试是自动替换成 \e
  1. #--------------------------------------------------------------------------
  2. # ● 逐个字开始描绘
  3. #--------------------------------------------------------------------------
  4. def play_onetext
  5.   tx = @text_array.shift  #获取并删除文字数组第一个字。

  6.   if tx == '\e' # 此处修改成你字符串中 \ 符号变更
  7.     # 读取出转义符
  8.     t_ = ''; code = ""
  9.     while t_ != '['
  10.       code += t_
  11.       t_ = @text_array.shift
  12.     end
  13.     # 读取出方括号内参数
  14.     t_ = ''; param = ""
  15.     while t_ != ']'
  16.       param += t_
  17.       t_ = @text_array.shift
  18.     end
  19.     # 分析
  20.     case code
  21.     when "c"
  22.       self.contents.font.color = text_color(param.to_i)
  23.     end
  24.     return # 防止绘制转义符
  25.   end

  26.   cw = contents.text_size(tx).width #获取描绘这个字需要的宽度。
  27.   if @text_pos[:x] + cw > Helpset::Width_MAX   #如果描绘的坐标X加上宽度超过 xxx ,就换行。
  28.       @text_pos[:x] = 0
  29.       @text_pos[:y] += 24    #假如行距是 32 。
  30.   end
  31.   self.contents.draw_text(@text_pos[:x], @text_pos[:y], cw, 32, tx)  #描绘这个文字。
  32.   @text_pos[:x] += cw   #宽度累加。
  33. end
复制代码

当然这只是抛砖引玉,只考虑了有[]传入参数的转义符,具体你可以自己尝试,仿照默认的window message绘制也可以

评分

参与人数 2星屑 +120 赞 +1 收起 理由
正太君 + 120 认可答案
文雅夕露 + 1 谢谢指导,我去试试看

查看全部评分

回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部