Project1

标题: Interpreter.new的东西真诡异 [打印本页]

作者: kvkv97    时间: 2015-10-15 23:41
标题: Interpreter.new的东西真诡异
1,
为什么Interpreter.new需要循环?XP的
在地图场景中,方法update中,@map_interpreter.new(0,false)为什么要放在里面循环?
2,
def update
      # 尝试执行事件列表、返回值为 false 的情况下
      if execute_command == false
        return
      end
  end
为什么 execute_command 要赋值为 false ? false 不是不执行了吗?
3,
  def setup_starting_event
    # 循环 (地图事件)
    for event in $game_map.events.values
      # 如果找到了启动中的事件
      if event.starting
        # 如果不是自动执行
        if event.trigger < 3
          # 清除启动中标志
          event.clear_starting
        end
        # 设置事件
        setup(event.list, event.id)
      end
    end
  end
  event.clear_starting不是不启动事件了吗?setup(event.list, event.id)还能继续吗?
4,
我查下了, execute_command这个方法没被调用,为什么地图能用这个方法execute_command里面的指令???
作者: 喵呜喵5    时间: 2015-10-16 00:45
没用过xp,不一定对:
1.A.new 和 @a.new 是不同的,请先区分开来
2.为什么要赋值为false,事件不就不执行了吗
因为事件已经全部执行完了,现在希望事件不执行了,所以赋值为false
3.setup方法有哪个语句需要依赖被清楚的启动中标志么?
4.因为是不停循环的interpreter在调用这些方法
作者: wbsy8241    时间: 2015-10-16 00:46
本帖最后由 wbsy8241 于 2015-10-16 00:48 编辑

1. 我没在 地图场景中 发现 @map_interpreter.new(0,false)
   地图场景中会刷新 公共事件(interpreter)
   不循环刷新 怎么执行事件? 怎么执行自动开始的事件?怎么执行并行事件 里面的等待不刷新要怎么执行?
2. if execute_command == false
   这句话的意思是“如果  execute_command 返回的是 false”
   “==” 不是赋值 是判断
   2PS: 如果一个变量之前没有被赋值过 那就执行 这个类中的同名 类, 比如这个会执行 def execute_command 这个类 判断 execute_command 的返回值
3.不让事件立即执行啊 事件还是要载入的 还有接触开启之类的啊
4.参见 第二条  execute_command 已经被调用了


你可以看看帮助文件 基本的赋值 判断 都没搞清楚。
作者: kvkv97    时间: 2015-10-16 17:45
本帖最后由 kvkv97 于 2015-10-16 17:49 编辑

1,第一问题准确描述应该是:$game_system.map_interpreter.update为什么需要循环?
  1. class Scene_Map
  2.   def main
  3.     loop do
  4.       update
  5.     end
  6.   end
  7.   def update
  8.     $game_system.map_interpreter.update   
  9.   end
  10. end
复制代码
2,
“如果一个变量之前没有被赋值过那就执行这个类中的同名变量,比如这个会执行 def execute_command 这个类 判断 execute_command 的返回值”的意思是:条件语句if execute_command == false在做出判断前,会自动执行def execute_command再做判断吗?
3,

  1.   def setup_starting_event
  2.     # 循环 (地图事件)
  3.     for event in $game_map.events.values
  4.       # 如果找到了启动中的事件
  5.       if event.starting
  6.         # 如果不是自动执行
  7.         if event.trigger < 3
  8.           # 清除启动中标志
  9.           event.clear_starting
  10.         end
  11.         # 设置事件
  12.         setup(event.list, event.id)
  13.       end
  14.     end
  15.   end
复制代码
这个的意思是:如果找到了启动中的事件,就设置事件执行事件,然后再作判断if event.trigger < 3执行语句event.clear_starting吗?
4,
  # 什么都没有设置的情况下
  if @list == nil
     return
  end
的意思是:在没启动事件前,@list是空的,不设置返回值;如果没这个设置的话,那么,为什么def execute_command /if @index >= @list.size - 1 的size会出现空类的方法而报错?
作者: kvkv97    时间: 2015-10-17 17:26
顶起!!!
作者: kvkv97    时间: 2015-10-18 17:32
求解答!!!!!!!!!!!!!!!!!!!
作者: duchen5779    时间: 2015-10-19 11:14
我只想说……这是VX区……
作者: 喵呜喵5    时间: 2015-10-19 12:06
kvkv97 发表于 2015-10-16 17:45
1,第一问题准确描述应该是:$game_system.map_interpreter.update为什么需要循环?2,
“如果一个变量之前 ...

你这四个问题特么和你一楼写的完全不一样好吗?

1.执行事件是在$game_system.map_interpreter.update中做的,不循环,事件执行一步就停了,具体请自己去看对应update部分的代码

2.会,具体来说,方法定义再更早之前就已经完成了

3.是

4.nil没有size方法
@list 为nil 时执行 @list.size 自然报错
作者: 喵呜喵5    时间: 2015-10-20 08:39
本帖最后由 喵呜喵5 于 2015-10-20 08:43 编辑

回一楼点评:
然后呢?你想说什么?
根据语境来看,在这里return的主要作用是用来结束这个方法,调用这个方法的代码并不会去依赖这个方法的返回值
你这边的总结给我的感觉就是整个都乱七八糟的,特别是这句:“@list空值则@list不返回值(自然@list.size不被调动)”

回四楼点评:
关于 execute_command 的返回值为false,请先看懂这个方法的代码,看不懂的话请告诉我你究竟哪里看不懂了


另外不知道你是通过什么途径学习脚本的,从你的回复中感觉你的整个逻辑都很混乱,个人建议你通过一些书籍(例如这本动物书:http://pan.baidu.com/s/1jGtU790 ,或者大名鼎鼎的镐头书)系统的重新学习一遍Ruby语言




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