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

Project1

 找回密码
 注册会员
搜索
楼主: david_ng223
打印 上一主题 下一主题

[結帖]我開始學腳本啦~~求大神們指點~~

[复制链接]

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

11
发表于 2014-2-1 16:35:13 | 只看该作者
余烬之中 发表于 2014-2-1 15:27
点评累死了……

你的错误在这里

我的意思是你的表达式无法匹配 [pkdh 8]

/\[pkdh\s*(\d+(?:\.\d+)?)\]/ 没有任何问题,问号是必要的,$1引用的是整个数(可以是整数、可以是小数)

点评

虽然复制的是/\[pkdh\s*(\d+(?:\.\d+)?)\]/ 但我脑补成了/\[pkdh\s*(\d+)(?:\.\d+)?\]/ 这样的话$1匹配99而$2不匹配98  发表于 2014-2-1 16:43
不好意思,pokedex_height,pokedex_weight全部都是小數的 例如 7.5kg, 80.0kg, 0.5m, 13.0m 等等  发表于 2014-2-1 16:40
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

12
发表于 2014-2-1 16:49:21 | 只看该作者
本帖最后由 taroxd 于 2014-2-1 17:00 编辑

To LZ

连贴这么多不好意思,但是点评实在不舒服,而且写不下

/\[pkdh\s*(\d+(?:\.\d+)?)\]/ 你写小数(比如13.0)当然也是没问题的,效果和写13一样。最后 $1.to_f 终究是转成浮点数。
这样的话备注 [pkdh 13] 和 [pkdh 13.0] 是相同的效果,用这样的正则表达式具有更好的兼容性。
?: 倒是可有可无的,但是写上可以禁止后位引用,防止数错括号以及提高性能。

至于原因,请你自己解读一下这个正则表达式,我相信你可以解读出来的。
不懂或者忘了,可以参考F1文档,是有正则表达式的字典的

重要:请努力学习基本的ruby语法。 论坛里找本教程吧,应该不少呢。a ? b : c 和 =~ 算是很基本的符号的说。

To 余烬之中

说实话我不喜欢把 \d 写成 . ,并且喜欢在不出错的时候尽可能具有兼容性。所以我自己写的时候通常是大小写不敏感,如果要转成浮点数的话是小数与整数皆可读取的。
而且我自己写的时候不喜欢用[]、比较喜欢用<>,这样就不用斜杠转义了,这里就按照LZ的符号用了
这个是代码风格问题,请不要在意

点评

我一般也是\d 只是浮点数那么长就干脆用.了 兼容性是我的疏忽(揉脸) i是必须加的 另外我一般也是用<> 原因是……HTML标签习惯  发表于 2014-2-1 17:03
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
13
 楼主| 发表于 2014-2-1 17:16:01 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

14
发表于 2014-2-1 17:21:15 | 只看该作者
david_ng223 发表于 2014-2-1 17:16
斜杠转义即是/\/的紅色符号??

是的話,那麼可以改成\么??

/\[pkdh\s*(\d+(?:\.\d+)?)\]/

RUBY 代码复制
  1. /<pkdh\s*(\d+(?:\.\d+)?)>/i


/regexp/ 是表示两根斜杠中间是正则表达式

点评

我很少用%r 一般都是通过\/跳脱的  发表于 2014-2-1 17:24
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
15
 楼主| 发表于 2014-2-1 18:15:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
16
 楼主| 发表于 2014-2-1 19:24:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

17
发表于 2014-2-1 20:22:33 | 只看该作者
本帖最后由 taroxd 于 2014-2-1 20:43 编辑
david_ng223 发表于 2014-2-1 19:24
@余烬之中 @taroxd
我剛吃完晚飯了,你們吃完沒XD


[建议]
36~38行可改为
RUBY 代码复制
  1. def pokedex_type_pokemon?
  2.   @note =~ /<pkdtpkm>/i # 三目运算符是多余的。
  3.   # 如果一定要返回true或false,可改为 /<pkdtpkm>/i === @note 或 !!(@note =~ /<pkdtpkm>/i) 或 !(@note !~ /<pkdtpkm>/i)
  4. end


[错误]
41行的正则表达式中没有后位引用,$1一定为nil

[建议]
注意 module Zero 的缩进。 RPG::Actor的缩进是正确的。

[建议]
注释方法可参考RGSS默认脚本,不建议用 #a #b ... 的方式。用上面定义常量的那种方式注释也可以。

[建议]
有弹出错误窗口的话请自己根据错误信息调试。
如果不跳错误窗口,但是达不到满意的效果的话,可以使用方法 p 或 msgbox 追踪,看看哪里没有得到预期的值

点评

我只是说普遍情况 很多新手都被这个玩晕……我学的时候根本没管他是什么意思 后来写了几个脚本自己就懂了  发表于 2014-2-2 09:28
#a #b是用來表示我想要的效果,以後會刪除的  发表于 2014-2-1 20:42
我自己也被@到了……  发表于 2014-2-1 20:25
他还没运行 检测不出来 话说你这一回复把我@到了……  发表于 2014-2-1 20:24
回复 支持 反对

使用道具 举报

david_ng223 该用户已被删除
18
 楼主| 发表于 2014-2-1 21:49:21 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

梦石
0
星屑
6643
在线时间
1275 小时
注册时间
2013-8-21
帖子
3657

开拓者

19
发表于 2014-2-2 09:22:02 | 只看该作者
本帖最后由 余烬之中 于 2014-2-2 09:23 编辑
david_ng223 发表于 2014-2-1 21:49
@余烬之中 @taroxd

接著應該就是初始化了,


好吧 新手杀手alias 我还是举例子吧 先是super
一个父类
RUBY 代码复制
  1. class Base
  2.    def meet
  3.       say "Hello!"
  4.    end
  5.    def say *args
  6.       print *args
  7.    end
  8. end

一个子类
RUBY 代码复制
  1. class Derive < Base
  2.    def meet
  3.       super
  4.       say "How are you going?"
  5.    end
  6. end

父类的实例和子类的实例
RUBY 代码复制
  1. b = Base.new
  2. d = Derive.new
  3.  
  4. b.meet #=> Hello!
  5. d.meet #=> Hello!How are you going?

大概你已经能理解super了 现在是alias 既然上面有了一个Base类 我们就用它举例
分别考虑两种情况
===============================================不使用alias的情况
RUBY 代码复制
  1. class Base
  2.    def say *args
  3.       print "AAAAAAA"
  4.    end
  5. end
  6.  
  7. Base.new.meet #=> "AAAAAAA"
===============================================使用alias的情况
RUBY 代码复制
  1. class Base
  2.    alias old_say say
  3.    def say
  4.       old_say
  5.       print "AAAAAAA"
  6.    end
  7. end
  8.  
  9. Base.new.meet #=> "Hello!AAAAAAA"
===============================================
总结如下
1.已知方法a 如果之后再定义def a .... end 那么新的内容会覆盖旧的内容
2.alias可以保存某方法(不仅是方法)在某时刻的状态(理解用),相当于拍个照片,或者类比成保存一个副本
3.alias的语法为 【alias 副本名 原名】
4.之后可以在任何地方调用此副本 副本不随源的变化而变化
5.这种手段一般用于给方法新增内容 新的say其实已经覆盖了旧的say 但是old_say还在 可以被调用
6.新增内容时,优先采用alias追加定义
7.注意!如果出现了alias重名,常常出现“Stack Level Too Deep”错误,例子:
RUBY 代码复制
  1. # 小A与小B都在写脚本 对已有的脚本进行修改
  2. #已有脚本
  3. class Player < Role
  4.   def talk *args
  5.      say *args
  6.   end
  7.   def say *args
  8.     puts *args
  9.   end
  10. end
  11.  
  12. #小A的脚本
  13. class  Player
  14.   alias old_talk talk
  15.   def talk *args
  16.     old_talk
  17.     puts "小A"
  18.   end
  19. end
  20.  
  21. #小B的脚本
  22. class Player
  23.   alias old_talk talk
  24.   def talk *args
  25.      old_talk
  26.      puts "小B"
  27.   end
  28. end
  29.  
  30. #运行
  31. p = Player.new
  32. p.talk "Hello!"
  33. # Stack Level Too Deep

但这样就没有错误
RUBY 代码复制
  1. #小A的脚本
  2. class  Player
  3.   alias old_talk_of_A talk
  4.   def talk *args
  5.     old_talk_of_A  
  6.     puts "小A"
  7.   end
  8. end
  9.  
  10. #小B的脚本
  11. class Player
  12.   alias old_talk_of_B talk
  13.   def talk *args
  14.      old_talk_of_B
  15.      puts "小B"
  16.   end
  17. end
  18.  
  19. #运行
  20. p = Player.new
  21. p.talk "Hello!"
  22. #=> "Hello!小A小B"

常见的alias(别名)方式有几种要特别注意 常常与别人重复
·old_原名(say=>old_say)
·old_原名开头几个字母(initialize=>old_init)
推荐的别名方式
·当前脚本名略缩_方法(或方法略缩)
·当前脚本名略缩_方法(或方法略缩)_当前年月日
·自己英文名略缩_当前脚本名略缩_方法(或方法略缩)
·自己英文名略缩_当前脚本名略缩_方法(或方法略缩)_当前年月日
比如我常常这样
update=>mo_vtpb_upt
【另外提一点 alias一般有两种写法:
1.alias old_a a
2.alias :old_a :a
在这里这没什么区别 喜好问题 以后遇到alias_method时只能用后者】
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

20
发表于 2014-2-2 09:31:39 | 只看该作者
顺便打个广告

http://rpg.blue/thread-347871-1-1.html

要在原方法后追加可以用这个
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-24 11:28

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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