Project1
标题: 突然发现,RGSS3默认脚本也会卖萌? [打印本页]
作者: taroxd 时间: 2014-5-23 19:55
标题: 突然发现,RGSS3默认脚本也会卖萌?
本帖最后由 taroxd 于 2014-5-23 20:54 编辑
两段脚本均位于 Game_Actor 内……
经检验,英文版也是一样……看来不是汉化卖萌
希望没有火星
题外话,把exp这么设定成这么一个hash,除了转职之外似乎也没什么好处的说……
作者: 怪蜀黍 时间: 2014-5-23 20:10
那明显是写重复了,删了第一个去
作者: 2673627593 时间: 2014-5-23 20:33
既然写了就应该有用吧。
作者: moy 时间: 2014-5-23 20:45
这个故事告诉我们,再有经验有时也免不了无用功
作者: 咕噜 时间: 2014-5-24 18:00
{:8_444:}那就再重复一段(*PIAJI
作者: fux2 时间: 2014-5-24 18:17
hash的效率要高一些,在va环境下没研究,但是xp环境下效率 table>hash>array
在大量循环处理这些数据的时候体现出来的效果尤为明显
作者: taroxd 时间: 2014-5-24 18:58
本帖最后由 taroxd 于 2014-5-24 19:01 编辑
fux2 发表于 2014-5-24 18:17 
hash的效率要高一些,在va环境下没研究,但是xp环境下效率 table>hash>array
在大量循环处理这些数据的时候 ...
虽然我想说的是默认脚本用hash而不是直接用整数,不过说到这个,我就来无聊测测效率了
Ruby2.0 环境下,array效率远高于hash
我的测试结果:
require 'Benchmark'
big = 10000000
array = (0...big).to_a
hash = {}
big.times {|i| hash[i] = i }
Benchmark.bmbm do |x|
x.report('array') {big.times{|i| array[i]}}
x.report('hash') {big.times{|i| hash[i]}}
end
require 'Benchmark'
big = 10000000
array = (0...big).to_a
hash = {}
big.times {|i| hash[i] = i }
Benchmark.bmbm do |x|
x.report('array') {big.times{|i| array[i]}}
x.report('hash') {big.times{|i| hash[i]}}
end
输出:- Rehearsal -----------------------------------------
- array 0.624000 0.000000 0.624000 ( 0.636037)
- hash 4.649000 0.000000 4.649000 ( 4.663266)
- -------------------------------- total: 5.273000sec
- user system total real
- array 0.640000 0.000000 0.640000 ( 0.641037)
- hash 4.727000 0.000000 4.727000 ( 4.730271)
复制代码 吐槽:为什么论坛代码里array是高亮的啊
作者: maliut 时间: 2014-5-24 19:14
因为很重要所以写了两次……
作者: 无脑之人 时间: 2014-5-24 19:57
hash怎么散列也没有数组快啊= =另外这么设计有利于提高兼容性吧,至于写两遍……大概就是很重要咯233
作者: taroxd 时间: 2014-5-24 19:59
无脑之人 发表于 2014-5-24 19:57 
hash怎么散列也没有数组快啊= =另外这么设计有利于提高兼容性吧,至于写两遍……大概就是很重要咯233 ...
我怎么觉得这么设计除了为了转职还是为了转职
作者: chd114 时间: 2014-5-25 15:48
防止误删···
作者: 喵呜喵5 时间: 2014-5-25 15:56
借楼问一下,result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }写两遍是做什么用的,我一直没有理解清楚……- def convert_escape_characters(text)
- result = text.to_s.clone
- result.gsub!(/\\/) { "\e" }
- result.gsub!(/\e\e/) { "\\" }
- result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
- result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
- result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
- result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
- result.gsub!(/\eG/i) { Vocab::currency_unit }
- result
- end
复制代码
作者: taroxd 时间: 2014-5-25 15:58
本帖最后由 taroxd 于 2014-5-25 15:59 编辑
喵呜喵5 发表于 2014-5-25 15:56 
借楼问一下,result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }写两遍是做什么用的,我一直没有 ...
应该是和exp一样,因为很重要所以要写两遍……
作者: 喵呜喵5 时间: 2014-5-25 16:02
taroxd 发表于 2014-5-25 15:58 
应该是和exp一样,因为很重要所以要写两遍……
再借楼问一下,Scene_Debug里面那句被注释掉的代码是什么情况……
作者: taroxd 时间: 2014-5-25 16:07
喵呜喵5 发表于 2014-5-25 16:02 
再借楼问一下,Scene_Debug里面那句被注释掉的代码是什么情况……
因为很重要所以要用绿色(雾
应该是不要注释掉的吧
作者: taroxd 时间: 2014-5-25 16:12
本帖最后由 taroxd 于 2014-5-25 16:18 编辑
喵呜喵5 发表于 2014-5-25 16:02 
再借楼问一下,Scene_Debug里面那句被注释掉的代码是什么情况……
我还在想,默认的那堆module为什么不用module_function方法(之后自己的类include一下多方便,还打那么多self),
Cache的@cache为什么不直接在模块定义时初始化,
还有Game_System#japanese? 这个方法是干啥用的,
为什么不给Game_Switches、Game_Variables、Game_SelfSwitches弄个父类……
然后
Window_DebugRight#update_variable_mode方法的第一行 return unless $game_variables[current_id].is_a?(Numeric)
看来默认脚本本来就有$game_variables被我们恶整的觉悟啊~
作者: IamI 时间: 2014-5-25 18:48
exp是为了可读性吧,毕竟Actor太长。
当然更有可能是两个人写的拼在一起以后合成了。
变量写两遍是为了处理\v[\v[x]]这样的情况。
关于Cache,模块哪有构造函数,不要闹……
Switch为什么没有父类?因为是从XP和VX一路直接拷贝过来的。
VX Ace发行有日语和英语两个版本。
作者: taroxd 时间: 2014-5-25 18:52
IamI 发表于 2014-5-25 18:48 
exp是为了可读性吧,毕竟Actor太长。
当然更有可能是两个人写的拼在一起以后合成了。
变量写两遍是为了处理 ...
3. 为什么不直接递归到底?nil while result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
nil while result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
4. 首先,模块可以定义initialize,然后,我指的不是这个
举例:
module Cache
[url=home.php?mod=space&uid=341345]@Cache[/url] = {}
module_function
# def...
end
module Cache
[url=home.php?mod=space&uid=341345]@Cache[/url] = {}
module_function
# def...
end
还有我说的是 Game_System#japanese? 这个方法没有什么实际作用
作者: fux2 时间: 2014-5-25 18:54
喵呜喵5 发表于 2014-5-25 15:56 
借楼问一下,result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }写两遍是做什么用的,我一直没有 ...
变量引用变量2333
作者: moy 时间: 2014-5-25 19:02
taroxd 发表于 2014-5-25 18:52 
3. 为什么不直接递归到底? nil while result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] } [/p ...
japanese?只是提供个方法?然后告诉你“哼,你们这些破解汉化的,看到没,这是日本软件!”
不嵌套到底是因为……谁TM这么用谁就是有病。滚去用脚本← ←
作者: taroxd 时间: 2014-5-25 19:09
本帖最后由 taroxd 于 2014-5-25 19:11 编辑
moy 发表于 2014-5-25 19:02 
japanese?只是提供个方法?然后告诉你“哼,你们这些破解汉化的,看到没,这是日本软件!”
不嵌套到底是 ...
真·有病然后咱破解汉化的应该这么玩
def chinese?
return true
end
alias japanese? chinese?
def chinese?
return true
end
alias japanese? chinese?
作者: DeathKing 时间: 2014-5-26 00:10
本帖最后由 DeathKing 于 2014-5-26 07:28 编辑
taroxd 发表于 2014-5-25 15:58 
应该是和exp一样,因为很重要所以要写两遍……
是的,为什么不使用while来处理,直至处理完毕呢?于是,不要怕,大刀阔斧地改吧!于是我们立马注释掉了#232和#233,添加上我们的代码:
正当我们心满意足地欣赏我们的杰作时,你突然想到下面的自指会让我们陷入无穷尽的循环中。
你轻蔑地说:“啧!哪里有这么蛋疼的人,写得出这么蛋疼的指令?”而当你冷静下来,你会觉得,即时是嵌套两层,也是非常少见了,嵌套多层更是比“使用奇怪的自指”罕有。
一方面,我们希望让系统的复杂度保持足够的低,换句话说,我们不太希望”变量存放的地址是另一个变量的地址,而另一个变量里面存放的是另一个变量的地址“这种type ***之类的数据存在。这类功能有更简洁、明了的表达方式,不用让我们的思维兜圈子。这样来说,默认脚本提供了一次嵌套,已经能囊括99%的情况了。
至于Hash和Array的效率问题。Array的IO操作都能在O(1)时间内完成,这是由于Array可以通过索引快速计算出元素的地址。而Hash依赖于哈希函数hash()(或者称为key())的定义,如果有碰撞,hash还得处理碰撞,如拉链法就得额外增加一个链表遍历的开销,开放寻执法得额外增加一个开放寻址的开销。
Hash与Array的相比,优势是很明显的:Array只能以整数(索引)为Key,而Hash可以以任何对象为Key(原理上是将对象映射为整数)。另外,假设为了寻找字符串“target",使用数组无序存储,则需要花O(n)的时间去遍历Array,而是用Hash,可以将时间复杂度降至O(1)。
RM最大的开销来自于图像的描绘,在Ruby层面上的计算开销是很少的。就RM数据的规模来说,Hash和Array对效率的影响并没有那么严重。根据实际情况和方便程度决定使用Hash还是Array即可。
作者: moy 时间: 2014-5-26 00:31
DeathKing 发表于 2014-5-26 00:10 
是的,为什么不使用while来处理,直至处理完毕呢?于是,不要怕,大刀阔斧地改吧!于是我们立马注释掉 ...
果断好评了
DK君怎么看待默认脚本里调用的一层套一层的方法?如果是你的话,你会希望这种分割的工作细分到多少层或是多细截止?
作者: DeathKing 时间: 2014-5-26 06:17
moy 发表于 2014-5-26 00:31 
果断好评了
DK君怎么看待默认脚本里调用的一层套一层的方法?如果是你的话,你会希望这种分割的 ...
大概是哪个地方?
如果不是递归调用,方法调用的深度大概再3~5层应该就够了。这种情况下,逻辑已经被分得足够细了,没必要再细化。
作者: taroxd 时间: 2014-5-26 07:42
本帖最后由 taroxd 于 2014-5-26 07:43 编辑
DeathKing 发表于 2014-5-26 06:17 
大概是哪个地方?
如果不是递归调用,方法调用的深度大概再3~5层应该就够了。这种情况下,逻辑已经被分 ...
比如说 apply_critical 这个方法,只有一次被调用,然后我记得调用它的方法也只有一次被调用。(我现在没有环境,有可能会记错~)
就是方法拆的很散吧。
我觉得这个风格很适合我们自定义脚本呢~ 也很适合子类覆盖。说实话我挺喜欢这个风格的
作者: moy 时间: 2014-5-26 14:28
taroxd 发表于 2014-5-26 07:42 
比如说 apply_critical 这个方法,只有一次被调用,然后我记得调用它的方法也只有一次被调用。(我现在没 ...
=-=是啊,估计也是考虑到肯定有喜欢改暴击方式的人,所以把暴击的实现单独拉出来了。
我就看到人问暴击怎么改,想要根据技能加倍数或者其他方式。
我自己的是根据幸运敏捷有加成。便利呢~
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |