Project1

标题: 请教两个RGSS的生僻问题 [打印本页]

作者: kvkv97    时间: 2014-11-26 11:52
标题: 请教两个RGSS的生僻问题
本帖最后由 RyanBern 于 2014-11-26 11:58 编辑

第一个问题:
一方面:
RUBY 代码复制
  1. @map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))

读出的地图数据储存了地图事件数据events,是<RPG::Event>的数据;
RUBY 代码复制
  1. for i in @map.events.keys
  2.       @events[i] = Game_Event.new(@map_id, @map.events[i])
  3. end

读取地图事件的主键值,作为参数,再设置一个实变量events的哈希表储存Game_Event对象;
另一方面:
RUBY 代码复制
  1. @map_interpreter = Interpreter.new(0, true)

问题来了,事件怎么和编译器联结在一起的呢?例如,执行“重新设置窗口”内容,而执行语句是包含在事件中的,那么编译器是对事件的执行语句进行编译还是对事件进行编译?于是,我想,编译器要编译执行内容,首先要和事件连结起来,因为执行内容list是事件events的属性。我这样的理解对吗?
第二个问题:
Scene_File类中:
RUBY 代码复制
  1. def main
  2.     # 生成帮助窗口
  3.     @help_window = Window_Help.new
  4.     @help_window.set_text(@help_text)
  5. end

Window_Help类中:
RUBY 代码复制
  1. def set_text(text, align = 0)
  2.     # 如果文本和对齐方式的至少一方与上次的不同
  3.     if text != @text or align != @align
  4.       # 再描绘文本
  5.       self.contents.clear
  6.       self.contents.font.color = normal_color
  7.       self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  8.       @text = text
  9.       @align = align
  10.       @actor = nil
  11.     end
  12.     self.visible = true
  13. end

我的问题是:@help_window.set_text(@help_text)的参数传递给 set_text(text, align = 0),那么,参数数目不同怎么能进行传递?不是需要参数数目相同才能进行传递么?
作者: VIPArcher    时间: 2014-11-26 12:06
第一个问题:啥???
第二个问题:set_text(text, align = 0)中[align = 0]是设置默认值,作用是调用这个方法时未传入该参数时作为默认值
作者: RyanBern    时间: 2014-11-26 12:13
1.首先要理解一下,什么是Interpreter。
LZ提到的“编译器”,实际指的应该是“Interpreter”吧,这个可不叫编译器,而应该称作为“解释器”。
编译器有专有的含义,英文名对应的是“Compiler”,它的作用是编译你手动写的代码以供机器使用。←这句话可以不看
因此,通俗来讲,解释器的作用就是把一条条指令变为实际应该做的事情,这是考虑到RGSS的数据结构。在RGSS中,类RPG::Event里面存储的是有关地图事件的数据,注意,它存储的只是数据,而不是执行的代码。这个数据存在@list实例变量中,这个你应该是知道的。我们暂且把存储在@list里面的东西叫做一条条“指令”(注意,指令的本质是数据而非代码),那么,装载地图的时候,实际上是把这些数据装载进去了,那么,这些指令怎么变成代码的呢?这就需要解释器。
每一条指令大概可分为两部分内容,指令编号(code)和参数(parameters),这样,一条指令的内容就可以完全确定了。你可以看下Interpreter(1~7)的内容,里面大多都是写的对不同指令编号的处理方法,这里才是真正的代码区域。
2.有一种东西叫做默认参数,在这里,set_text的第二个参数就是默认参数,如果你给了两个参数,那么它接受你给的两个参数运行,如果你只给了一个参数,那么第二个参数有默认值0,它就会按照你给的第一个参数+第二个参数的默认值执行。
具体有关参数的知识,可以看这个:
https://rpg.blue/forum.php?mod=v ... p;page=1#pid2519334




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1