Project1

标题: 小教程,修改对话框的功能 [打印本页]

作者: 柳柳    时间: 2008-1-14 04:18
标题: 小教程,修改对话框的功能
老早年间的帖子了,动网的论坛太慢,自己查都不方便,从自己小窝贴过来一份。

RMVX的对话框逻辑非常清晰,增减修改都极其简单。这里记录一点点研究考虑的内容。

1、行距:

整个游戏的行距全部通过一个变量WLH来控制,搜索WLH,找到赋值的24,改为32,就很有RMXP的感觉了。但是实际上测试的时候官方明显没有进行过多测试,这里改为32之后,直接战斗窗口就有选项逻辑错误了——不是行距位置错误,而是逻辑错误。不管怎样,这里调整对话框的行距……

2、新增控制符:

在VX的Window_Message里面,用一个函数convert_special_characters完整记录了控制符的转换逻辑,我在这里添加两行:

  1.   def convert_special_characters
  2.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  3.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  4.     @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
  5.     @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  6.     @text.gsub!(/\\G/)              { "\x02" }
  7.     @text.gsub!(/\\\./)             { "\x03" }
  8.     @text.gsub!(/\\\|/)             { "\x04" }
  9.     @text.gsub!(/\\!/)              { "\x05" }
  10.     @text.gsub!(/\\>/)              { "\x06" }
  11.     @text.gsub!(/\\</)              { "\x07" }
  12.     @text.gsub!(/\\\^/)             { "\x08" }
  13.     @text.gsub!(/\\\\/)             { "\\" }
  14. # ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★
  15.     @text.gsub!(/\\S\[([0-9]+)\]/i) { "\x09[#{$1}]" }  
  16.     @text.gsub!(/\\I\[([0-9]+)\]/i) { "\x10[#{$1}]" }
  17.   end
复制代码


这样在对话里面就可以输入\S[5],\I[7]一类的来执行一些功能。下面来书写功能。

3、新增功能:

在update_message中,可以清楚地看到每个\x的功能,这里把新添的\x09和\x10添加上:

  1.   def update_message
  2.     loop do
  3.       c = @text.slice!(/./m)            # 获取下次文字
  4.       case c
  5.       when nil                          # 没有描画的文字
  6.         finish_message                  # 结束更新
  7.         break
  8.       when "\x00"                       # 换行
  9.         new_line
  10.         if @line_count >= MAX_LINE      # 行数是最大时
  11.           unless @text.empty?           # 仍然继续的情况下
  12.             self.pause = true           # 等待输入
  13.             break
  14.           end
  15.         end
  16.       when "\x01"                       # \C[n]  (更改文字色)
  17.         @text.sub!(/\[([0-9]+)\]/, "")
  18.         contents.font.color = text_color($1.to_i)
  19.         next
  20.       when "\x02"                       # \G  (显示所持金)
  21.         @gold_window.refresh
  22.         @gold_window.open
  23.       when "\x03"                       # \.  (等待 1/4 秒)
  24.         @wait_count = 15
  25.         break
  26.       when "\x04"                       # \|  (等待 1 秒)
  27.         @wait_count = 60
  28.         break
  29.       when "\x05"                       # \!  (等待输入)
  30.         self.pause = true
  31.         break
  32.       when "\x06"                       # \>  (瞬间表示 ON)
  33.         @line_show_fast = true
  34.       when "\x07"                       # \<  (瞬间表示 OFF)
  35.         @line_show_fast = false
  36.       when "\x08"                       # \^  (不等待输入)
  37.         @pause_skip = true
  38. # ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★
  39.       when "\x09"                       # \S[n]  (这个是我加上描绘技能)
  40.         @text.sub!(/\[([0-9]+)\]/, "")
  41.         item = $data_skills[$1.to_i]
  42.         draw_item_name(item, @contents_x, @contents_y)
  43.         @contents_x += 24 + contents.text_size(item.name).width
  44.       when "\x10"                       # \I[n]  (这个是我加上描绘物品)
  45.         @text.sub!(/\[([0-9]+)\]/, "")
  46.         item = $data_items[$1.to_i]
  47.         draw_item_name(item, @contents_x, @contents_y)
  48.         @contents_x += 24 + contents.text_size(item.name).width
  49. # ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★
  50.       else                              # 普通的文字
  51.         contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
  52.         c_width = contents.text_size(c).width
  53.         @contents_x += c_width
  54.       end
  55.       break unless @show_fast or @line_show_fast
  56.     end
  57.   end
复制代码

这么简单就实现了最基本的一些脚本功能:加入对话中的图标。利用玮子以前提供的思路,这里就可以加入各种静态的QQ表情了。最简单测试截图如下:


              [本贴由 御灵 于 2008-1-18 0:23:21 进行了编辑] [LINE]1,#dddddd[/LINE]本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^ [LINE]1,#dddddd[/LINE]本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者: 柳柳    时间: 2008-1-14 04:18
标题: 小教程,修改对话框的功能
老早年间的帖子了,动网的论坛太慢,自己查都不方便,从自己小窝贴过来一份。

RMVX的对话框逻辑非常清晰,增减修改都极其简单。这里记录一点点研究考虑的内容。

1、行距:

整个游戏的行距全部通过一个变量WLH来控制,搜索WLH,找到赋值的24,改为32,就很有RMXP的感觉了。但是实际上测试的时候官方明显没有进行过多测试,这里改为32之后,直接战斗窗口就有选项逻辑错误了——不是行距位置错误,而是逻辑错误。不管怎样,这里调整对话框的行距……

2、新增控制符:

在VX的Window_Message里面,用一个函数convert_special_characters完整记录了控制符的转换逻辑,我在这里添加两行:

  1.   def convert_special_characters
  2.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  3.     @text.gsub!(/\\V\[([0-9]+)\]/i) { $game_variables[$1.to_i] }
  4.     @text.gsub!(/\\N\[([0-9]+)\]/i) { $game_actors[$1.to_i].name }
  5.     @text.gsub!(/\\C\[([0-9]+)\]/i) { "\x01[#{$1}]" }
  6.     @text.gsub!(/\\G/)              { "\x02" }
  7.     @text.gsub!(/\\\./)             { "\x03" }
  8.     @text.gsub!(/\\\|/)             { "\x04" }
  9.     @text.gsub!(/\\!/)              { "\x05" }
  10.     @text.gsub!(/\\>/)              { "\x06" }
  11.     @text.gsub!(/\\</)              { "\x07" }
  12.     @text.gsub!(/\\\^/)             { "\x08" }
  13.     @text.gsub!(/\\\\/)             { "\\" }
  14. # ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★
  15.     @text.gsub!(/\\S\[([0-9]+)\]/i) { "\x09[#{$1}]" }  
  16.     @text.gsub!(/\\I\[([0-9]+)\]/i) { "\x10[#{$1}]" }
  17.   end
复制代码


这样在对话里面就可以输入\S[5],\I[7]一类的来执行一些功能。下面来书写功能。

3、新增功能:

在update_message中,可以清楚地看到每个\x的功能,这里把新添的\x09和\x10添加上:

  1.   def update_message
  2.     loop do
  3.       c = @text.slice!(/./m)            # 获取下次文字
  4.       case c
  5.       when nil                          # 没有描画的文字
  6.         finish_message                  # 结束更新
  7.         break
  8.       when "\x00"                       # 换行
  9.         new_line
  10.         if @line_count >= MAX_LINE      # 行数是最大时
  11.           unless @text.empty?           # 仍然继续的情况下
  12.             self.pause = true           # 等待输入
  13.             break
  14.           end
  15.         end
  16.       when "\x01"                       # \C[n]  (更改文字色)
  17.         @text.sub!(/\[([0-9]+)\]/, "")
  18.         contents.font.color = text_color($1.to_i)
  19.         next
  20.       when "\x02"                       # \G  (显示所持金)
  21.         @gold_window.refresh
  22.         @gold_window.open
  23.       when "\x03"                       # \.  (等待 1/4 秒)
  24.         @wait_count = 15
  25.         break
  26.       when "\x04"                       # \|  (等待 1 秒)
  27.         @wait_count = 60
  28.         break
  29.       when "\x05"                       # \!  (等待输入)
  30.         self.pause = true
  31.         break
  32.       when "\x06"                       # \>  (瞬间表示 ON)
  33.         @line_show_fast = true
  34.       when "\x07"                       # \<  (瞬间表示 OFF)
  35.         @line_show_fast = false
  36.       when "\x08"                       # \^  (不等待输入)
  37.         @pause_skip = true
  38. # ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★
  39.       when "\x09"                       # \S[n]  (这个是我加上描绘技能)
  40.         @text.sub!(/\[([0-9]+)\]/, "")
  41.         item = $data_skills[$1.to_i]
  42.         draw_item_name(item, @contents_x, @contents_y)
  43.         @contents_x += 24 + contents.text_size(item.name).width
  44.       when "\x10"                       # \I[n]  (这个是我加上描绘物品)
  45.         @text.sub!(/\[([0-9]+)\]/, "")
  46.         item = $data_items[$1.to_i]
  47.         draw_item_name(item, @contents_x, @contents_y)
  48.         @contents_x += 24 + contents.text_size(item.name).width
  49. # ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★# ★
  50.       else                              # 普通的文字
  51.         contents.draw_text(@contents_x, @contents_y, 40, WLH, c)
  52.         c_width = contents.text_size(c).width
  53.         @contents_x += c_width
  54.       end
  55.       break unless @show_fast or @line_show_fast
  56.     end
  57.   end
复制代码

这么简单就实现了最基本的一些脚本功能:加入对话中的图标。利用玮子以前提供的思路,这里就可以加入各种静态的QQ表情了。最简单测试截图如下:


              [本贴由 御灵 于 2008-1-18 0:23:21 进行了编辑] [LINE]1,#dddddd[/LINE]本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^ [LINE]1,#dddddd[/LINE]本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
作者: 风雪优游    时间: 2008-1-14 04:45
爽!很好很好~~非常的好……就是现在没办法用
作者: face00zz    时间: 2008-1-14 06:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: 御灵    时间: 2008-2-11 20:03
发布完毕.
http://rpg.blue/web/htm/news959.htm
作者: 火鸡三毛老大    时间: 2008-2-11 22:59
那个显示物品图标的看起来 一个字 爽  两个字 很爽 三个字 超级爽  四个字 ...........{/tp}
作者: 越前リョーマ    时间: 2008-2-11 23:01
能显示图标真是不错哈……{/hx}
作者: Beside    时间: 2008-2-11 23:02
有谁能告诉我怎么实现显示说话人姓名的功能吗...就是对话框左上角一个小框框
作者: 越前リョーマ    时间: 2008-2-11 23:03
以下引用Beside于2008-2-11 15:02:54的发言:

有谁能告诉我怎么实现显示说话人姓名的功能吗...就是对话框左上角一个小框框

又显示头像又这样很难看的……

你自己设想一下好了……
作者: Beside    时间: 2008-2-11 23:04
.....已经搜索到脚本了  先研究着..
作者: 精灵使者    时间: 2008-2-12 03:01
可以不可以像苹果梨那样,更改字体的大小和透明度呢。
作者: 越前リョーマ    时间: 2008-2-12 04:09
以下引用精灵使者于2008-2-11 19:01:53的发言:

可以不可以像苹果梨那样,更改字体的大小和透明度呢。

小幽写的有这个功能。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1