ickable 对象以一个固定的tick速率来接收更新(消息)。每个tickable对象都要确保每隔32毫秒进行一次更新(默认).但这个并不意味着每个32毫秒对 象一定会有一个tick,对于每帧需要进行大量数据处理的环境,将会导致一种情形,在这种情形下,对象在某个时间T接收到一个tick,直到T+64才得 到另一个tick,这样在T+64的时刻这个对象将会收到两个tick,就超出了每32毫秒刷新一次的约定.

创建 Tickable对象

为了创建一个tickable对象,你需要做的就是从Itickable继承. ITickable 设计就是用在多重继承的环境,它是一个很简单的类。还有其它特殊的可以运行Itickable的类,比如GuiTickCtrl.作为举例,下面就展示了 如何创建一个tickable SimObject:

class FooClass : public SimObject, public virtual ITickable

{

// You still mark SimObject as Parent

typedef SimObject Parent;

private:

...

protected:

// These three methods are the interface for ITickable

virtual void interpolateTick( F32 delta );

virtual void processTick();

virtual void advanceTime( F32 timeDelta );

public:

...

};

上面的方法就是让一个对象执行ITickable 接口所需要的,ITickable 是个纯虚类,这就意味这,这些方法必须至少有一个实例。同样,类似于这个的多重继承环境,typedef 不应该定义ITickable,但是可以用来定义适当的基类。ITickable 仅仅是一个接口。继承来自ITickable 的属性,

ITickable接口

Itickable接口由三个方法组成

processTick

processTick这个方法在每次tick的时候被调用,如果这个对象的 isProcessingTicks返回为真。默认下, ITickable::isProcessingTicks 的返回值是ITickable::mTickable (通过公共方法ITickable::setProcessTick 来设定)。当以一个固定速率处理时,所有的代码都应该在这个方法中完成.

interpolateTick

如果isProcessingTicks 的返回值为真,则这个方法每帧都会被调用。她允许Tickable对象在ticks之间进行插值.它包含有一个32位的浮点值,这个浮点值代表当前到下个 tick之间的时间,以一个百分比来表达。这个delta时间可以用下面的方式进行描述:

delta time = time until next tick / total time per tick

therefore the delta time approaches zero as the simulation moves closer to the next tick. 也就是说delta时间越接近零,那么相当于越接近于下个tick。

advanceTime

Every frame an ITickable object will recieve advanceTime methods regardless of the return value of isProcessingTicks. 每帧,不管isProcessingTicks返回值是多少,ITickable 对象将会接收advanceTime方法。这个方法有一个32位的表示时间量的浮点值,单位秒,从上次调用advanceTime以来的时间。

TickableObjects 和 ITickable相关推荐

  1. Minecraft 1.12.2模组开发(三十九) 反应器(TileEntity方块实体)

    说到方块实体(TileEntity),可以理解为一种功能性方块,比如熔炉,箱子,附魔台等. 我们今天来做一个类似于熔炉的反应器 熔炉逻辑: 放入燃料-> 放入物品 -> 获取产出物品 1. ...

  2. 10.Unity Zenject高级编程(使用工厂动态创建物体)

    前言 新手使用Zenject框架经常会遇到一个头痛的问题,怎么样在游戏启动以后动态创建新物体: 假如你做一个游戏需要生成很多的敌人(Enemies),然后你将会去构建新的敌人实类, 并且要确保这些敌人 ...

  3. 04.Unity Zenject入门到掌握(Zenject的绑定实例Bind)

    文档大纲 绑定说明 过程 示例 绑定格式 字段表单说明 构建方法(Construction Methods) 33. FromSubContainerResolve - 通过子容器实例对象 绑定说明 ...

最新文章

  1. python读取word
  2. Leangoo用户设置在哪里?
  3. python实现逻辑回归的流程_逻辑回归原理及其python实现
  4. 计算机对教育的影响雅思听力,雅思听力机考带来的两大影响
  5. 【数据库系统】SQL程序设计的层次
  6. bzoj4195 noi2015 day1 t1
  7. java的各种加载和初始化的详细过程
  8. asp.net GridView控件的列属性
  9. java io 字符流操作工具类
  10. 小米6twrp最新第三方rec_小米5(gemini:双子座)刷机
  11. 进销存excel_简单易操作!Excel免费进销存管理系统!不花钱的进销存管理软件...
  12. android 常用机型尺寸_android手机屏幕密度和逻辑尺寸
  13. Unity文件转移出现的粉红色材质的处理方法
  14. c51单片机音乐门铃C语言程序,基于51单片机的无线音乐门铃设计
  15. uniapp 小程序 ios 音频播放 没有声音的问题
  16. 【视频分享】尚硅谷Java视频教程_Spring Boot视频教程(下)整合篇
  17. 面经分享|中科院老哥的算法开发岗面经总结
  18. Intel SGX开发者参考书(四)—— Enclave开发基础(三)
  19. 人工智能创业公司的项目BP
  20. 为什么容器内存占用居高不下,频频 OOM(续)

热门文章

  1. 集成服务入门(实验9)日志记录和邮件通知
  2. webdriver Google-chrome crashed
  3. c语言错误的等式,C语言学习中几个常见典型错误分析.docx
  4. python从零实习深度学习_月薪45K的深度程序员教你从零在Python中开发深度学习
  5. sar分辨率公式_初识合成孔径雷达SAR
  6. python隐藏部分代码_python隐藏类中属性的3种实现方法
  7. excel vlookup多个条件匹配多列_Excel中的Vlookup函数,轻松实现多条件查询!
  8. 让word不显示计算机名作者,如何使word在其他电脑上也不显示回车符
  9. Oracle 常用运维命令整理
  10. oracle exists mysql_oracle_in_exists_left-join