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

Project1

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

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

[复制链接]
david_ng223 该用户已被删除
跳转到指定楼层
1
发表于 2014-2-1 09:30:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv4.逐梦者 (版主)

百合控

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

开拓者

2
发表于 2014-2-1 09:54:22 | 只看该作者
module(英:模块)用来定义一个模块(废话) 每个module必须有一个end与之对应 恩 满足条件
模块名必须大写字母开头 没问题
module可以嵌套 你这里就是一个Zero模块嵌套Pokedex模块 没问题
#开头的就是注释 没问题
大写字母开头的一般是常量 用的很对 常量用=赋值 没问题 语法完全正确 新手长错的数组也用的很好
我唯一比较好奇的是 09、18、19行 既然说了是开关 为什么用的是真伪……好吧语法上没问题
另外在游戏中这段脚本的作用不会体现出来 因为你只是定义了而已

评分

参与人数 1梦石 +2 收起 理由
Sion + 2 给你2个意思一下,我懒得看了.....

查看全部评分

萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

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

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

4
发表于 2014-2-1 14:08:51 | 只看该作者
本帖最后由 taroxd 于 2014-2-1 14:40 编辑
david_ng223 发表于 2014-2-1 13:57
@余烬之中
這段改自敌人图鉴 VA-核心脚本-第61-83行
應該是讀取數據庫-敵人(我改成主角)-註釋內的東西?? ...


以下[建议]可以让你的代码更加美观易读。
       [问题]就是代码有bug,需要修改

[建议]if语句在单行且不长的情况下使用这样的形式:把if用作修饰符。即 return $1 if ...

[??]关于你的注释,请参阅任意正则表达式教程。 楼下的介绍就不错。

[问题]30、38行中$1是字符串,需要转化成数值类型

[问题]29、37行的正则表达式无法读取浮点数

[建议]多行的block请使用do...end的形式

[建议]在不需要的时候不用显式地写上return

[建议]String#each_line 可以代替 split 那些东西。不过在这里的代码完全不需要分行处理。

[建议]给一个修改意见吧:
RUBY 代码复制
  1. def pokedex_height      #我想在數據庫-主角-註釋用[pkdh 7.4]之後在窗口顯示數值7.4(pokemon的身高)
  2.   @note =~ /\[pkdh\s*(\d+(?:\.\d+)?)\]/ ? $1.to_f : 0.0
  3. end
  4. # 像这样,一行就可以解决的为什么要写这么长呢?
  5. # 如果觉得很难理解,请参阅F1文档和正则表达式的教程
  6. # 正则表达式看样子很可怕,其实是非常简单易用的,请务必学会

点评

29 37行直接传送字符串也可以 因为他的目的还是显示 大概要用到draw_text 传数字又要to_s  发表于 2014-2-1 14:27

评分

参与人数 1梦石 +2 收起 理由
Sion + 2 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

百合控

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

开拓者

5
发表于 2014-2-1 14:22:42 | 只看该作者
david_ng223 发表于 2014-2-1 13:57
@余烬之中
這段改自敌人图鉴 VA-核心脚本-第61-83行
應該是讀取數據庫-敵人(我改成主角)-註釋內的東西?? ...
#為什麼上面用d+這裡用S+??
#什麼是$1??

这些你需要了解一下正则表达式
直接解释的话 是这样:
RUBY 代码复制
  1. line =~ /\[(?:pkdp) (\S+)\]/

你应该知道 line是一个字符串(String类的实例)变量   字符串常量用英文半角双引号""括起来
而后面的/\[(?:pkdp) (\S+)\]/是一个正则表达式(Regexp类的实例)常量   正则式常量用一对斜杠//括起来
字符串 =~ 正则式
将正则式与字符串进行匹配,匹配的结果存储在全局变量$~、$&和$1、$2、$3....中
$~存储所有匹配信息 $&是匹配成功的字符串 $1之类(后位引用)是分别匹配成功的字符串
这里有点难懂 给几个例子
RUBY 代码复制
  1. "hello!" =~ /he/
  2. # $~.to_a    ["he"]
  3. # $&            "he"
  4. # $1            nil

匹配成功 但未分群 所以无法后位引用 分群使用一对英文括号
RUBY 代码复制
  1. "Nice to meet you!" =~ /(nice).*(meet)/
  2. # $~.to_a   []
  3. # $&           nil
  4. # $1           nil

匹配失败 分了群 但无匹配 大小敏感
RUBY 代码复制
  1. "Nice to meet you!" =~ /(nice).*(meet)/i
  2. # $~.to_a   ["Nice to meet", "Nice", "meet"]
  3. # $&           "Nice to meet"
  4. # $1           "Nice"
  5. # $2           "meet"
  6. # $3           nil

匹配成功 且分了两个群 前面的存在$1 后面的$2 如果更多 以此类推
这一个能成功匹配 因为在正则式后面加了i 大小写不敏感
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

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

使用道具 举报

Lv4.逐梦者 (版主)

百合控

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

开拓者

7
发表于 2014-2-1 15:27:54 | 只看该作者
本帖最后由 余烬之中 于 2014-2-1 16:47 编辑
david_ng223 发表于 2014-2-1 15:12
\s
匹配任意的空白符

点评累死了……
==================================================================编辑↓
你的错误在这句话没有错误
RUBY 代码复制
  1. @note =~ /\[pkdh\s*(\d+(?:\.\d+)?)\]/ ? $1.to_f : 0.0
(第二个问号不需要 但是也不会出错 既然是冗余我就删了)
================ 补充:问号表示匹配一次或零次 如果所有数据强制要求0.0的形式不用问号 如果允许写整数就加上问号 ================
进行匹配
RUBY 代码复制
  1. "[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+))\]/
  2. # $1  "99"
  3. # $2  nil

(感谢@taroxd 指出的Bug 这段解说↑有误 正确的如下)
RUBY 代码复制
  1. "[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+))\]/
  2. # $1  "99.98"
  3. # $2  nil

==================================================================编辑↑
因为(?:)是 无后位引用功能的分群 不能被$2引用
你可以这样
RUBY 代码复制
  1. "[pkdh 99.98]" =~ /\[pkdh\s*(\d+)\.(\d+)\]/
  2. # $1  "99"
  3. # $2  "98"
还可以这样
RUBY 代码复制
  1. "[pkdh 99.98]" =~ /\[pkdh\s*(\d+\.\d+)\]/
  2. # $1  "99.98"
  3. # $2  nil
还可以这样
RUBY 代码复制
  1. "[pkdh 99.98]" =~ /\[pkdh\s*(.+\..+)\]/
  2. # $1  "99.98"
  3. # $2  nil

所以 最后就是这样
RUBY 代码复制
  1. @note =~ /\[pkdh\s*(.+\..+)\]/ ? $1.to_f : 0.0
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

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

使用道具 举报

Lv4.逐梦者 (版主)

百合控

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

开拓者

9
发表于 2014-2-1 16:24:24 | 只看该作者
david_ng223 发表于 2014-2-1 16:09
分拆完應該是

@note =~ /       #這些不明白.......這個是a


a

RUBY 代码复制
  1. 字符串 =~ 正则式
这代表将字符串与正则式进行匹配 失败则返回nil 成功返回未匹配的字符个数
RUBY 代码复制
  1. 表达式1 ? 表达式2 : 表达式3
等价于
RUBY 代码复制
  1. if 表达式1
  2.    表达式2
  3. else
  4.    表达式3
  5. end

如果表达式1为false或者nil则条件伪 执行3 否则条件真 执行2
所以
RUBY 代码复制
  1. 字符串 =~ 正则式 ? 使用$1 : 默认值

如果匹配了 就使用匹配信息 否则就用默认值

b与c

(不带反斜杠的)括号表示分群 只有分群后才能后位引用
RUBY 代码复制
  1. "ruby 1.9" =~ /ruby\s*\d+\.\d+/
  2. # $&  "ruby 1.9"
  3. # $1   nil
  4.  
  5. "ruby 1.9" =~ /ruby\s*(\d+\.\d+)/
  6. # $&  "ruby 1.9"
  7. # $1   "1.9"
萌新瑟瑟发抖
看到我请叫我去干活
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

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

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

开拓者贵宾

10
发表于 2014-2-1 16:30:03 | 只看该作者
本帖最后由 taroxd 于 2014-2-1 16:31 编辑
余烬之中 发表于 2014-2-1 15:27
点评累死了……

你的错误在这里


1. 第二个问号不需要,那我打一个整数怎么办?我为什么一定要打小数?我就打 [pkdh 8]呢?
2.  "[pkdh 99.98]" =~ /\[pkdh\s*(\d+(?:\.\d+)?)\]/
# $1  "99.98"
# $2  nil
不测试不要瞎说,我在Ruby、RGSS上测试出来都是99.98

点评

不过如果强制要求小数的话还是不加问号较好  发表于 2014-2-1 16:37
啊 不对 记错了 ?是一次或零次 你的正确  发表于 2014-2-1 16:36
不好意思,pokedex_height,pokedex_weight全部都是小數的 例如 7.5kg, 80.0kg, 0.5m, 13.0m 等等  发表于 2014-2-1 16:35
第二个问号的意思是 前面的重复一次或多次……也就是说 可以匹配 33.34.35.36……不加问号才是正确的  发表于 2014-2-1 16:35
2.这个确实错了 眼花 把括号看到了前面……参见七楼第三块代码  发表于 2014-2-1 16:33

评分

参与人数 1星屑 +36 收起 理由
余烬之中 + 36 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-6 07:25

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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