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

Project1

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

[已经过期] 请问:解释器里面的一个量的值

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3925
在线时间
254 小时
注册时间
2013-10-13
帖子
790
跳转到指定楼层
1
发表于 2021-4-13 20:41:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
请问:解释器里面的一个量的值

  #--------------------------------------------------------------------------
  # ● 公共事件
  #--------------------------------------------------------------------------
  def command_117
    # 获取公共事件
    common_event = $data_common_events[@parameters[0]]
    # 公共事件有效的情况下
    if common_event != nil
      # 生成子解释器
      @child_interpreter = Interpreter.new(@depth + 1)
      @child_interpreter.setup(common_event.list, @event_id)
    end
    # 继续
    return true
  end

请问:我P @event_id的时候,值为1,但是弄不清楚怎么来的。请问,它在什么地方被赋值了?

Lv3.寻梦者

梦石
0
星屑
3925
在线时间
254 小时
注册时间
2013-10-13
帖子
790
2
 楼主| 发表于 2021-4-13 20:44:02 | 只看该作者
另外:@child_interpreter 为什么能在解释器的方法update中调用,怎么不会造成栈过深? 在update中,@child_interpreter.update,怎么不会造成栈过深?
回复 支持 反对

使用道具 举报

Lv6.析梦学徒

老鹰

梦石
40
星屑
33407
在线时间
6552 小时
注册时间
2012-5-26
帖子
3178

极短24评委极短23参与极短22参与极短21评委老司机慢点开短篇十吟唱者组别冠军开拓者剧作品鉴家

3
发表于 2021-4-13 21:23:59 | 只看该作者
@event_id 就是当前地图上正在执行的那个事件的id
在解释器的 setup 方法中被传入和记录

因为在 update 方法里,特别对 @child_interpreter 进行了判定
如果存在子解释器,就更新子解释器,然后return,不进行自己的更新

不报错是因为不是反复调用自己的update,不构成闭环
具体可以这样说:
A 和 B 都是巡逻的狗(事件解释器)
A 在认真巡逻(在更新事件指令)
忽然发生紧急情况,但是 A 不能走开,于是让 B 去看看(调用公共事件,执行公共事件里的指令)
等到 B 看完回来了(公共事件执行完),A 继续之前的巡逻
所以并没有任何递归

点评

?为啥要在update前又生成一个新的  发表于 2021-4-15 19:09
把 @child_interpreter = Interpreter.new放在update中的@child_interpreter.update前面,就会出现栈过深!  发表于 2021-4-15 14:49
@child_interpreter 是一个新的解释器对象,和当前解释器没有关系,只不过在当前解释器里更新而已  发表于 2021-4-14 18:31
是不是“因为在 update 方法里,特别对 @child_interpreter 进行了判定”才造成不闭环的效果?  发表于 2021-4-14 15:26
你那样解释,我还是不是很明白@  发表于 2021-4-14 15:25
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-26 04:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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