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

Project1

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

[已经解决] 请教对话框里一段脚本的意思

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-8-26
帖子
68
跳转到指定楼层
1
发表于 2011-8-14 22:05:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 「旅」 于 2011-8-16 09:00 编辑

请教脚本:   
begin
        last_text = @now_text.clone
        @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
      end until @now_text == last_text
      @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
      $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
    end

其中  @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }什么意思?
望大虾们相助~

点评

标题已帮助修改。  发表于 2011-8-16 09:01
坐观LZ被扣分……  发表于 2011-8-14 22:26

评分

参与人数 1星屑 -30 收起 理由
禾西 -30 亂寫標題

查看全部评分

没有什么是做不到的!
前方的路如何?不走怎么知道!

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60710
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

2
发表于 2011-8-14 22:39:43 | 只看该作者
那句东西是进行正则表达式识别……
碰到左边这种就替换成右边的结果
  1. V[I0]  => convart_value("I", 0)
  2. V[W3]  => convart_value("W", 3)
  3. V[A1]  => convart_value("A", 1)
  4. V[S33]  => convart_value("S", 33)
  5. V[32]  =>  convart_value("", 32)
复制代码
楼主请去看看正则表达式的介绍~
$1代表正则表达式中第一对()匹配的内容
$2以此类推


orzfly于2011-8-14 22:47补充以下内容:
  1. @now_text.gsub!(/\\[Nn]\[([0-9]+)\]/) do $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
复制代码
这里 do something 就相当于 {something}。
/\\[Nn]\[([0-9]+)\]/是正则表达式,开头和结尾的/就像字符串的引号一样。

\\是转义,匹配一个\
[Nn]匹配大小写任意的N
\[匹配一个[
(
[0-9]匹配一个数字
+重复上一行任意次,也就是说可以匹配很多位数字
)这对括号是第一个匹配组,等下再说
\]匹配一个]

当@now_text在字符串中成功匹配了之后,会将整个匹配的内容传给$0,第一个匹配组的内容传给$1,以此类推,然后计算后面的do something或{something}中的something,将匹配的内容替换成计算结果。

~其实就是个替换,不过每次替换的东西都不一样。
  1. p "I am BoY. YoU are a Girl.".gsub!(/[A-Z]([a-z])[A-Z]/) do $2+$1+$3
  2. # => "I am oBY. oYU are a Girl."
复制代码

点评

怎么都觉得好奇怪,为什么不是 convert 而是 convart?  发表于 2011-8-14 22:40
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-8-26
帖子
68
3
 楼主| 发表于 2011-8-15 08:44:29 | 只看该作者
orzfly 发表于 2011-8-14 22:39
那句东西是进行正则表达式识别……
碰到左边这种就替换成右边的结果楼主请去看看正则表达式的介绍~
$1代表 ...

还是不太明白 ([IiWwAaSs]?)和([0-9]+)还有{ convart_value($1, $2.to_i) }
您能给单独解释下么?
没有什么是做不到的!
前方的路如何?不走怎么知道!
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60710
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

4
发表于 2011-8-15 13:24:29 | 只看该作者
请去看正则表达式的介绍。http://deerchao.net/tutorials/regex/regex.htm
请看了之后再继续看。

你把def convart_value(这个东西发出来。

convart_value是一个函数,你那脚本里面定义的。

gsub就是根据正则表达式替换。
  1. "aAbBsdfsdfSFDG".gsub!(/([A-Z])[a-z]([a-z])/) { blabla($1, $2) }
复制代码
这句的执行过程,就是:
1. 扫描那个字符,找到第一个匹配Bsd,这时候$1="B", $2="d"。
2. 然后计算 blabla($1, $2),你这里就是convart_value,他的计算结果我不知道是什么,除非你发出来。
3. 用计算结果替换原来字符串里匹配的Bsd。假设计算结果是OHDEAR,那么这是字符串就变成"aAbOHDEARfsdfSFDG"了。
4. 然后循环1,直到再也找不到了……
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-8-26
帖子
68
5
 楼主| 发表于 2011-8-15 22:06:08 | 只看该作者
orzfly 发表于 2011-8-15 13:24
请去看正则表达式的介绍。http://deerchao.net/tutorials/regex/regex.htm
请看了之后再继续看。

def convart_value(option, index)
    option == nil ? option = "" : nil
    option.downcase!
    case option
      when "i"
        unless $data_items[index].name == nil
          r = sprintf("\030[%s]%s", $data_items[index].icon_name, $data_items[index].name)
        end
      when "w"
        unless $data_weapons[index].name == nil
          r = sprintf("\030[%s]%s", $data_weapons[index].icon_name, $data_weapons[index].name)
        end
      when "a"
        unless $data_armors[index].name == nil
          r = sprintf("\030[%s]%s", $data_armors[index].icon_name, $data_armors[index].name)
        end
      when "s"
        unless $data_skills[index].name == nil
          r = sprintf("\030[%s]%s", $data_skills[index].icon_name, $data_skills[index].name)
        end
      else
      r = $game_variables[index]
    end
    r == nil ? r = "" : nil
    return r
  end

你给看看什么意思
没有什么是做不到的!
前方的路如何?不走怎么知道!
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
245
在线时间
227 小时
注册时间
2009-7-26
帖子
216
6
发表于 2011-8-16 02:43:35 | 只看该作者
orzfly 已经写的很清楚了⋯⋯
楼主对脚本的了解有多少?
  1. @now_text.gsub!(/\\[Vv]\[([IiWwAaSs]?)([0-9]+)\]/) { convart_value($1, $2.to_i) }
复制代码
我想楼主不明白的代码主要式那段正则表达式吧?所以楼主还是应该去读读正则表达式先⋯⋯

嘛,这段代码的含义其实是读取@now_text这个变量,寻找类似于
V[W0], V[I1] ... 这种样子以V开头,用方框括号[]括起来的文字⋯⋯

然后根据括号里头第一个字母判断,如果是w就是武器(weapon),i就是道具(item),a就是装备(armor),s就是技能(skill)
再读取后面的数字,这个数字就是ID,比如第100号武器就是V[W100],29号道具就是V[I29]⋯⋯
最后读取取得的相对应的那个东西的名称和它对应的图标名称⋯⋯
组合成这样"\030[图标名字]东西的名字"

我个人认为正则表达式是需要自己体会的,建议楼主写点简单的代码实验下它的功能
不要吐槽我⋯⋯
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
48 小时
注册时间
2010-8-26
帖子
68
7
 楼主| 发表于 2011-8-16 11:21:12 | 只看该作者
正则表达式差不多明白了,谢谢了!
没有什么是做不到的!
前方的路如何?不走怎么知道!
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-14 14:56

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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