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

Project1

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

[已经解决] 请教两个RGSS的生僻问题

[复制链接]

Lv3.寻梦者

梦石
0
星屑
4169
在线时间
258 小时
注册时间
2013-10-13
帖子
815
跳转到指定楼层
1
发表于 2014-11-26 11:52:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 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),那么,参数数目不同怎么能进行传递?不是需要参数数目相同才能进行传递么?

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10079
在线时间
5020 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

2
发表于 2014-11-26 12:06:07 | 只看该作者
第一个问题:啥???
第二个问题:set_text(text, align = 0)中[align = 0]是设置默认值,作用是调用这个方法时未传入该参数时作为默认值

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2014-11-26 12:13:36 | 只看该作者
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

点评

看到编译器我就瞬间懵了……斑斑大高手啊!学会了新东东了!膜拜 m(_ _)m  发表于 2014-11-30 23:58
谢谢斑竹的热心指点,很多新手都找不到教程的  发表于 2014-11-26 21:44
其实所有的代码不都是数据么= =我们有萌萌的 ecx, eip ……  发表于 2014-11-26 17:22
我看了“编译器”也是愣了半天才理解LZ的话  发表于 2014-11-26 12:21
“编译器”吓尿。"喵呜是一个丧失"这点绝对是真的。嗯  发表于 2014-11-26 12:18
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 23:33

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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