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

Project1

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

[已经解决] gsub!怎么匹配负数

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2270
在线时间
125 小时
注册时间
2015-8-14
帖子
22
跳转到指定楼层
1
发表于 2021-2-7 13:23:31 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
我想用代码做一个改变画面色调的脚本
大概就是通过在地图名称中加入 <r:***>  <g:***> <b:***>
在Game_Map刷新的时候能直接应用到地图中。而不需要通过事件改变画面色调。
这个样子大概已经可以实现了。。
但是map_name.gsub!(/<r:([0-9]+)>/) { "" } 居然不能够匹配负数!!!!!
搞成两行又特别不舒服,所以要怎么做呢??

RUBY 代码复制
  1. def map_name
  2.     return if @mapinfo[@map_id].nil?
  3.     name = @mapinfo[@map_id].name
  4.     name.gsub!(/<r:([0-9]+)>/) { "" }
  5.     name.gsub!(/<g:([0-9]+)>/) { "" }
  6.     name.gsub!(/<b:([0-9]+)>/) { "" }
  7.     name.gsub!(/<gray:([0-9]+)>/) { "" }
  8.     return name
  9.   end
  10.   alias setup_rgss1 setup
  11.   def setup(map_id)
  12.     @mapinfo = load_data("Data/MapInfos.rxdata") if @mapinfo.nil?#兼容旧存档防错
  13.     if @mapinfo[map_id]
  14.       map_name = @mapinfo[map_id].name
  15.       map_name.gsub!(/<r:(-[0-9]+)>/) { "" }
  16.       red = $1.nil? ? 0 : $1.to_i
  17.       map_name.gsub!(/<r:([0-9]+)>/) { "" }
  18.       red = $1.nil? ? 0 : $1.to_i if red == 0
  19.       map_name.gsub!(/<g:(-[0-9]+)>/) { "" }
  20.       green = $1.nil? ? 0 : $1.to_i
  21.       map_name.gsub!(/<g:([0-9]+)>/) { "" }
  22.       green = $1.nil? ? 0 : $1.to_i if green == 0
  23.       map_name.gsub!(/<b:(-[0-9]+)>/) { "" }
  24.       blue = $1.nil? ? 0 : $1.to_i
  25.       map_name.gsub!(/<b:([0-9]+)>/) { "" }
  26.       blue = $1.nil? ? 0 : $1.to_i if blue == 0
  27.       map_name.gsub!(/<gray:(-[0-9]+)>/) { "" }
  28.       gray = $1.nil? ? 0 : $1.to_i
  29.       map_name.gsub!(/<gray:([0-9]+)>/) { "" }
  30.       gray = $1.nil? ? 0 : $1.to_i if gray == 0
  31.       if red.abs + green.abs + blue.abs + gray.abs != 0
  32.         tone = Tone.new(red,green,blue,gray)
  33.         $game_screen.start_tone_change(tone, 0)
  34.       end
  35.     end
  36.     setup_rgss1(map_id)
  37.   end

Lv5.捕梦者

梦石
10
星屑
39597
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

5
发表于 2021-2-7 21:05:06 | 只看该作者
本帖最后由 KB.Driver 于 2021-2-7 21:07 编辑

正则的规则其实很简单……掌握基本规则就能搞定一些简单的判断。
不过正式应用场合因为需要测试的缘故,直接找现成稳定的代码也是一种选择。

从已有的部分来看,楼主已经有了正则的基础,接下来就是经验的问题了。

工程实践方面,不推荐对原数据做破坏性修改。
也就是说,不要修改@name变量,但是你可以对name方法复制一份并进行修改,例如不读取井号以后的部分
RUBY 代码复制
  1. alias ordinary_name name
  2. def name
  3.   @processed_name ||= ((n = ordinary_name.index("#")) ? ordinary_name[0, n] : ordinary_name)
  4. end


然后,既然一次要读3个数,可以压缩数据,提高数据浓度。
例如使用<tone:xx,xx,xx,xx>,当然最后一个数可以省略

这个可以这样读
RUBY 代码复制
  1. map_name = @mapinfo[map_id].ordinary_name
  2. if map_name =~ /<tone:(-?\d+),(-?\d+),(-?\d+),?(-?\d+)?>/i
  3.   r, g, b, a = Regexp.last_match.captures # a指代ash,勉强也算“灰”
  4.   a ||= 0 # 灰度默认为0
  5.   # 色调操作
  6. end


测试

评分

参与人数 3星屑 +50 +2 收起 理由
MCCF + 1 日历NB
RyanBern + 50 认可答案
Hello``Bubble + 1 精品文章

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
42471
在线时间
7606 小时
注册时间
2009-7-6
帖子
13506

开拓者贵宾

4
发表于 2021-2-7 15:40:09 | 只看该作者
  1. "-50"[/(\-?\d+)/]
复制代码

一般情况下也不需要太复杂

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
Hello``Bubble + 1 我很赞同

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
2
星屑
6687
在线时间
501 小时
注册时间
2018-3-23
帖子
533

R考场第七期银奖

3
发表于 2021-2-7 14:13:26 | 只看该作者
仅供参考,来源:https://c.runoob.com/front-end/854

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
Hello``Bubble + 1 我很赞同

查看全部评分

祝好。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7981
在线时间
1183 小时
注册时间
2007-7-29
帖子
2055
2
发表于 2021-2-7 14:02:41 | 只看该作者
  1. (-*[0-9]+)
复制代码

评分

参与人数 2星屑 +50 +1 收起 理由
RyanBern + 50 认可答案
Hello``Bubble + 1 我很赞同

查看全部评分

回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-1 13:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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