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

Project1

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

[交流讨论] 歪门邪道事件心得[1]:为什么我的事件标题手感不好

[复制链接]

Lv6.析梦学徒

老鹰

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

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

1
发表于 2018-4-7 13:41:53 | 显示全部楼层
昨天才在另一个帖子里研究了一波默认的神奇interpreter类2333

这个事件修改后有两个地方与之前不一样了
1、新增了 等待一帧
2、新增了 循环

结合事件解释类里它的运行方法:一直循环直至完成全部指令,在真正取消自己的刷新前等待一帧(或者事件中途出现Fiber.yield,使得它的循环挂起,下一帧时再被resume,从上一帧执行到的位置继续这个循环)*具体见Fiber类
  1. #--------------------------------------------------------------------------
  2. # 运行
  3. #--------------------------------------------------------------------------
  4. def run
  5.   wait_for_message
  6.   while @list[@index] do
  7.     execute_command
  8.     @index += 1
  9.   end
  10.   Fiber.yield
  11.   @fiber = nil
  12. end
复制代码


因此,新增的这个 循环 指令,直接令事件永远不会执行完,也就是这个事件单凭自己是永远不会从run方法里的while @list[@index] do...end中结束的,也就更没有什么取消刷新前挂起一帧了。

但是,如果无聊自己试验过就知道,这种无限循环(无法结束的)会直接令游戏主逻辑卡死,也即画面不会被刷新、按键也不会被响应,
此时 等待一帧 的指令就有用了,我们人为在这个循环里添加一次挂起,当运行到这里时,这个事件这一帧要进行的操作就可以中止了,然后回到主逻辑里继续刷新其他的东西,这样主逻辑不受干扰继续刷新,而等到下一帧时,由于Fiber的特性,就让这个事件从上一帧中止的地方继续执行下去,我们又回到了事件里循环的开头,也即让这个事件随主逻辑1s60帧刷新
*主逻辑:游戏本身实际上是一个大循环,每一帧依次更新着画面、输入、声音等

点评

是的,因为事件没有结束,所以就跳过了多出的一帧……本来帖子也想提一下主逻辑的,但是那样可能内容就太多了,我去加个“看7楼”吧  发表于 2018-4-7 13:53

评分

参与人数 2+2 收起 理由
W.Q.C. + 1 精品文章
⑨姐姐 + 1 正确答案~

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-5 11:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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