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

Project1

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

小教程,修改对话框的功能

 关闭 [复制链接]

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

跳转到指定楼层
1
发表于 2008-1-14 04:18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
老早年间的帖子了,动网的论坛太慢,自己查都不方便,从自己小窝贴过来一份。

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 进行了编辑]
本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^

Lv1.梦旅人

66RPG站长

梦石
0
星屑
54
在线时间
615 小时
注册时间
2005-10-10
帖子
5734

RMVX自由创作大赛亚军第2届短篇游戏比赛亚军第5届短篇游戏比赛冠军

2
 楼主| 发表于 2008-1-14 04:18:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
老早年间的帖子了,动网的论坛太慢,自己查都不方便,从自己小窝贴过来一份。

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 进行了编辑]
本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
本贴由论坛斑竹柳柳结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^

Lv1.梦旅人

风雪夜不归人

梦石
0
星屑
50
在线时间
276 小时
注册时间
2006-3-7
帖子
6721

贵宾

3
发表于 2008-1-14 04:45:39 | 只看该作者
爽!很好很好~~非常的好……就是现在没办法用
有些人,到了七八月份就会诈尸。
宫斗,是女生永远的爱。
冷门,是本人不变的欲。
作弊,是玩家自由的痛。
练级,是橙光割舍的情。
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-1-3
帖子
38
4
发表于 2008-1-14 06:43:15 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

雷欧纳德的宠物

梦石
0
星屑
50
在线时间
769 小时
注册时间
2006-8-6
帖子
3778

贵宾

5
发表于 2008-2-11 20:03:10 | 只看该作者
打酱油的- -b
回复 支持 反对

使用道具 举报

Lv1.梦旅人

很傻很天真

梦石
0
星屑
55
在线时间
3 小时
注册时间
2007-3-13
帖子
3667
6
发表于 2008-2-11 22:59:37 | 只看该作者
那个显示物品图标的看起来 一个字 爽  两个字 很爽 三个字 超级爽  四个字 ...........{/tp}
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

7
发表于 2008-2-11 23:01:47 | 只看该作者
能显示图标真是不错哈……{/hx}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2006-5-21
帖子
773
8
发表于 2008-2-11 23:02:54 | 只看该作者
有谁能告诉我怎么实现显示说话人姓名的功能吗...就是对话框左上角一个小框框
MadniMStudio|Beside
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

名侦探小柯

梦石
0
星屑
3299
在线时间
3619 小时
注册时间
2006-9-6
帖子
37400

开拓者贵宾第3届短篇游戏大赛主流游戏组亚军第5届短篇游戏比赛亚军

9
发表于 2008-2-11 23:03:45 | 只看该作者
以下引用Beside于2008-2-11 15:02:54的发言:

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

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

你自己设想一下好了……
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
12 小时
注册时间
2006-5-21
帖子
773
10
发表于 2008-2-11 23:04:57 | 只看该作者
.....已经搜索到脚本了  先研究着..
MadniMStudio|Beside
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-22 21:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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