|
昨天才在另一个帖子里研究了一波默认的神奇interpreter类2333
这个事件修改后有两个地方与之前不一样了
1、新增了 等待一帧
2、新增了 循环
结合事件解释类里它的运行方法:一直循环直至完成全部指令,在真正取消自己的刷新前等待一帧(或者事件中途出现Fiber.yield,使得它的循环挂起,下一帧时再被resume,从上一帧执行到的位置继续这个循环)*具体见Fiber类
- #--------------------------------------------------------------------------
- # 运行
- #--------------------------------------------------------------------------
- def run
- wait_for_message
- while @list[@index] do
- execute_command
- @index += 1
- end
- Fiber.yield
- @fiber = nil
- end
复制代码
因此,新增的这个 循环 指令,直接令事件永远不会执行完,也就是这个事件单凭自己是永远不会从run方法里的while @list[@index] do...end中结束的,也就更没有什么取消刷新前挂起一帧了。
但是,如果无聊自己试验过就知道,这种无限循环(无法结束的)会直接令游戏主逻辑卡死,也即画面不会被刷新、按键也不会被响应,
此时 等待一帧 的指令就有用了,我们人为在这个循环里添加一次挂起,当运行到这里时,这个事件这一帧要进行的操作就可以中止了,然后回到主逻辑里继续刷新其他的东西,这样主逻辑不受干扰继续刷新,而等到下一帧时,由于Fiber的特性,就让这个事件从上一帧中止的地方继续执行下去,我们又回到了事件里循环的开头,也即让这个事件随主逻辑1s60帧刷新
*主逻辑:游戏本身实际上是一个大循环,每一帧依次更新着画面、输入、声音等 |
评分
-
查看全部评分
|