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

Project1

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

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

[复制链接]

Lv4.逐梦者

梦石
0
星屑
8498
在线时间
775 小时
注册时间
2017-11-10
帖子
1231
跳转到指定楼层
1
发表于 2018-4-7 21:52:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
也不知道该怎么说明比较好。
就是在一个新的帮助窗口使用转移符描绘部分文字颜色。
但是这个帮助窗口已经是按字描绘的。
就是想让逐个字描绘的效果跟更改颜色的效果共存。
脚本如下:
RUBY 代码复制
  1. class Window_Help2 < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # * 物件初始化
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0, 544, WLH + 48)
  7.     self.opacity = 0
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # ● 设置文本
  11.   #     text  : 窗口显示的字符串
  12.   #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  13.   #--------------------------------------------------------------------------
  14.     def set_text(text, align = 0)
  15.     # 如果文本和对齐方式的至少一方与上次的不同
  16.     if text != @text or align != @align
  17.       self.contents.clear
  18.       self.contents.font.color = normal_color
  19.   #  text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  20.   #  loop do
  21.   #    c = text.slice!(/./m)
  22.   #    case c
  23.   #    when nil
  24. #      break
  25. #      when "|"
  26. #       @text_pos[:x] = 0
  27.   #      @text_pos[:y] += 24
  28. #     when "\x01"
  29. #       text.sub!(/\[([0-9]+)\]/, "")
  30. #       self.contents.font.color = text_color($1.to_i)
  31. #       next
  32. #     else
  33. #       self.contents.font.color = normal_color
  34. #     end
  35. #   end
  36.       # 初始化文本数组
  37.       @text_array = text.split("")
  38.       #记录文本位置
  39.       @text_pos = {:x=>0,:y=>0}
  40.       @text = text
  41.       @align = align
  42.       @actor = nil
  43.     end
  44.     self.visible = true
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 逐个字开始描绘
  48.   #--------------------------------------------------------------------------
  49.   def play_onetext
  50.   tx = @text_array.shift  #获取并删除文字数组第一个字。
  51.   cw = contents.text_size(tx).width #获取描绘这个字需要的宽度。
  52.   if @text_pos[:x] + cw > Helpset::Width_MAX   #如果描绘的坐标X加上宽度超过 xxx ,就换行。
  53.       @text_pos[:x] = 0
  54.       @text_pos[:y] += 24    #假如行距是 32 。
  55.   end
  56.   self.contents.draw_text(@text_pos[:x], @text_pos[:y], cw, 32, tx)  #描绘这个文字。
  57.   @text_pos[:x] += cw   #宽度累加。
  58. end
  59.   #--------------------------------------------------------------------------
  60.   # ● 刷新
  61.   #--------------------------------------------------------------------------
  62.   def update
  63.   play_onetext if @text_array && @text_array.size > 0 && Graphics.frame_count % Helpset::Move == 0
  64.   end
  65. end

这是没加转义符的例图:

但为什么加了转义符之后帮助窗口就不显示内容了?


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

Lv6.析梦学徒

老鹰

梦石
40
星屑
34740
在线时间
6740 小时
注册时间
2012-5-26
帖子
3259

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

2
发表于 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 谢谢指导,我去试试看

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 05:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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