【饥荒随笔】事件系统

来源:互联网 发布:人工智能代替程序员 编辑:程序博客网 时间:2024/04/27 03:21

来讲一讲事件

何谓事件?

事件是可以由程序检测到的动作或发生的事情。典型的事件则与程序流同步处理,也就是程序有哪里处理事件的一个或多个专用的地方,常常指一个事件循环。

典型事件的来源包括用户(谁按下一个键上的键盘)。另一个来源是一个硬件设备,如定时器。

任何程序都可以自定义设置触发事件的事情,如完成通信任务。改变其行为响应于事件的函数(被认为是事件驱动的),事件常常具有与目标互动的功能。

 

以上翻译自维基百科Event (computing) 词条,因是英文,所以有一些语句不通顺,特附上原文:

In computing, an event is an action oroccurrence detected by the program that may be handled by the program.Typically events are handled synchronously with the program flow, that is, theprogram has one or more dedicated places where events are handled, frequentlyan event loop. Typical sources of events include the user (who presses a key onthe keyboard, in other words, through a keystroke). Another source is ahardware device such as a timer. Any program can trigger its own custom set ofevents as well, e.g. to communicate the completion of a task. A computerprogram that changes its behavior in response to events is said to beevent-driven, often with the goal of being interactive.

 

额,好吧上面的解释太抽象了,来个通俗的,事件就是你按下鼠标,降低生命,主角死亡啊等,这一类的事情就叫做事件。

 

你玩饥荒的时候,它每时每刻都在等待事件的发生,之后调用对应的事件处理函数,处理事件,再继续等待。

 

事件的分类?

 

在饥荒里可以分成三类

1.      输入事件

主要定义在 input.lua文件里。鼠标键盘的输入输出就是用input

2.      SG事件

框架定义在stategraph.Lua里,用来生成事物的状态,如睡觉啊,攻击呀 etc.

3.      其它

 

什么是事件队列?

 

         事件队列英文为Eventhandler ,在饥荒里,Event handler是一个表,存储着饥荒当前发生过,但是还没来得及处理的事件,因为cpu的处理能力有限,不可能一下子就处理完所有的事件,总有个先来后到之说,要按照事件队列的顺序一个个的处理后,从队列中删去.

         假如把事件队列比作独木桥的话,那事件就是一个个人,但是,人是有高矮胖瘦之分的,通过独木桥所需时间也就各不相同,当一个特别硕大的事件要通过这座独木桥时,就霸占了这一作座独木桥,别的事件就不能通过,引起所谓的卡顿现象.

         解决卡顿的方法有很多,这里简单说几种:

         第一个就是把事件队列拆成几座小的独木桥,不同的事件,不同的事物选用不同的独木桥,当一个事件队列被填满时不会影响其他的事件的就行,饥荒里就有采用这种方法.

         不过呢,这个方法有一个很大的bug,就是一个事件用用到另一个事件所产生的数据时,后者还没完成,就会引起错误,如果错误处理做得好,用默认数据,这个bug也就过去了,但是,错误处理机制做的不好(可能有些人连错误处理机制都不知道是什么东东),那饥荒就会抛出错误,通常就会提示某某变量不能为空nil.

         另一种是把一个事件拆分成几个小事件,比如把攻击这个事件拆成攻击前,攻击时,攻击后,被攻击(饥荒也就是这么弄的)

         我在这里举一个例子,计算pi的一千位,是一次性打印出来好呢,还是一个个打印出来好呢?

         前者会出现卡顿现象,其实并不是真正的卡顿,而是程序在后台运算,前台没有表现出来,我们以为它卡在那里了.

         后者会十分流畅的一个个数字打印出来,感觉不到卡顿现象,都是,后者与前者的运算速度比不是一个数量级的,如果追求性能,选前者,追求用户体验,后者.通常两者相互结合,保证有最好的效果.

0 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕40周还没入盆怎么办 孕妇脸上长斑了怎么办 七个月宝宝大便干怎么办 两月大婴儿不拉大便怎么办 周岁宝宝大便出血了怎么办 十一个月宝宝大便干燥怎么办 8个月宝宝大便干燥怎么办 7个月宝宝大便干燥怎么办 11个月宝宝大便干燥怎么办 9个月宝宝大便干燥怎么办 10个月宝宝大便干燥怎么办 宝宝两天没拉粑粑了怎么办 小学闺蜜嫉妒我怎么办 三年级孩子对应用题理解很差怎么办 我嫉妒我的朋友怎么办 嫉妒同学比我好怎么办 宝宝生在家里了怎么办 在家不小心生了怎么办 葫芦干了有黑点怎么办 单位费用发票丢失了怎么办 1岁宝宝太调皮了怎么办 孩子和同学打架家长该怎么办 孩子被大人打了怎么办 小孩不跟大人沟通怎么办 2岁小朋友爱动手怎么办 小班爱动手的小朋友怎么办 宝宝对小朋友不友好爱动手怎么办 小孩子上幼儿园爱打人怎么办 小孩被别人打了怎么办 1岁幼儿爱打人怎么办 作为幼小朋友打人老师怎么办 2岁半小朋友喜欢打人怎么办 2岁宝宝脾气大怎么办 4月小孩爱动怎么办 一岁宝宝老打人怎么办 1岁宝宝爱打人怎么办 3岁宝宝喜欢抓人怎么办 宝宝喜欢打人怎么办2岁 1岁宝宝动手打人怎么办 孩子总打人总哭怎么办 小孩出现夜惊家人怎么办