Torque引擎系列之核心类(SimObject)

从TGE引擎类图中,我们可以看出从ConsoleObject类进化出两个子类,一个是SimObject类,另一个是NetEvent类。NetEvent类主要负责网络传输,SimObject类是TGE引擎中所有模拟对象类的基类,下面我将详细介绍一下simObject类。
一、simObject的作用:
在游戏中,有许许多多的对象,包括人物、交通工具、场景中的建筑、太阳、天空等。所有的这些对象在游戏中必须要有一个管理者,而simObject最主要的作用就是提供了一个游戏对象管理机制。另外它还对ConsoleObject做了一些扩展,例如可以给simObject对象添加动态属性。
二、simObject对象生命周期管理:
在现实生活中,政府为了便于管理,都会给我们每个人分配一个唯一的身份证号。同样,在TGE引擎中,每个新创建的对象也会被系统分配一个id号。通过这个唯一的id号,我们能方便快速地找到对应的object。在引擎中是通过registerObject这个函数来注册对象的,如果注册成功,会分配一个唯一的id号。在TGE中,维护了两张表,一个是name表,另一个是id表。每次注册,都会在这两张表中添加一个记录。另外在该函数中还会调用onAdd函数进行初始化。当我们通过deleteObject函数删除某个对象的时候,会调用unregisterObject函数,在两张表中清除掉该对象的记录,并调用onRemove函数。onAdd和onRemove是两个非常重要的虚函数,基本上每个simObject的子类都必须重写这两个函数。
三、simObject的动态属性
在ConsoleObject中,我们可以通过initPersistFields函数定义类的静态属性。但是仅仅有静态属性肯定是不够的,很多在脚本中用到的对象属性都必须是动态的,simObject类就提供了动态属性这个机制。例如我们创建了一个名叫player的对象,然后要在该对象中添加一个状态属性只需要这样定义:player.state = "root",是不是很简单?以后你也可以随时在脚本里面更改这个属性的值。我们要注意的是这个属性只是在服务端或者客户端有用,如果你只是在服务端更行了这个对象的属性,对应的客户端对象属性值并不会自动更新。在引擎中想要更改或者获得该属性的值可以通过调用getDataField和setDataField方法。这两个方法对静态属性也有效。当我们调用setDataField方法时,产生一个回调函数通知某个属性值已经改变。如果是静态属性则是onStaticModified函数,动态属性是subscribedFieldIsChanged函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值