Gamebryo3.0SDK翻译-NiEntity

NiEntity

场景包含一系列实体,这些实体代表了游侠对象。它拥有很多属性。和实体相关的都放在NiEntity库中。

注意:Game framework中的实体拥有行为,能和world builder tool交互

一、 NiEntity接口

实体库中的接口包括实体、组件等,这些接口没有继承于NiRefObject和NiObject而自身实现了引用计数和RTTI.

NiEntityPropertyInterface:所有访问含有属性的接口基类。

NiEntityInterface:代表实体系统,包含属性以及管理组件和行为。

NiEntityComponentInterface:组件接口,组件是一组可以被更新的属性集合,实体中组件可以被动态挂载和卸载。

NiEntityErrorInterface:一些操作的错误。

NiEntityCommandInterface:命令接口

二、 实体的属性

1、 实体属性

可以通过属性名字来访问属性,定义两个同名属性是违法的。

Primitve Type:预定义的类型-字符串、浮点型。。。。

Sematic Type:表明该

Display Name

Description

Category方便管理这些属性,把这些属性放到一起。

Colletions属性可以包含多个数据元素。

Inherited Properties母实体(Master Entity)中属性可以被子实体继承。

2、 实体组件

3、 母实体(Master Entity)

每一个实体可以选择性地包含一个母实体,该实体可以继承一些或全部母实体的属性。

三、 实体的组件

实体组件包含了一系列相关的属性集合。是些组件可以实现更新操作。当要向一个实体添加一个组件时,必须确保组件中属性已经存在于实体中。此时实体不能再包含组件中存在的属性。

标准组件

NITansformationComponent:包含了Translate、Rotate、Scale

NiSceneGraphComponent:包含一个nif文件的路径。

NiLightComponent:

NICameralComponent:

NiGeneralComponent:

NiPrefabComponent:

四、 实体的命令

实体库提供了一个修改实体的框架,它时有命令和命令管理器组成的。命令封装一些列针对场景的允许操作和禁止操作。命令通过命令管理器来执行。

标准命令

五、 实体的更新和渲染

NiScene代表了系统中的一个场景,它包含了一个实体数组和选择集合(Selected sets),提供了Update和BuildVisiableSet功能。此时会调用每一个实体和组合的Update和BuildVisiabaleSet从而完成整个场景的更新和绘制。

更新:

clip_image002

渲染

clip_image004

NiEntityRenderingContext包含三个指针:NiRenderer、NiCamera、NiCullingProcess。该函数对场景进行剔除,最终建立一个NiVisiableArray。该数组包含了所有需要绘制的NiMesh。从而应用程序可以在合适的时候绘制这些对象。

六、 实体的序列化

实体实现了灵活和可扩展的流处理和序列化工作框架。从而可以实现各种文件格式的序列化和流处理。

NiEntityStreaming基类为用户自定义文件格式提供了许多方便:

A:所有继承于NiEntityStreaming的子类都将被注册到NiFactories的流工厂里。该工厂可以被工具(Scene Designer)使用。

B:所有继承于NiEntityStreaming的子类都含有从NiScene对象中添加和删除的接口,从而实现保存和加载场景。

C:所有继承于NiEntityStreaming的子类都服用已存在的代码。

序列化处理

NiEntityStreaming子类可以很方便地处理场景。

1、 属性

第一步:获取所有属性的名字

第二步:遍历流制化所有属性,此时要注意以下几点:

l 使用IsPropertySerilializable查询该属性是否可以流制化。

l 属性中的每一个值都要被流制化。

l 一些属性对于实体或组件也许不是活动的。

l 防止属性被二次序列化,最好首先流制化组件,让后流制化实体属性。可以通过IsComponentProperty查询该属性是否已存在于组件中。从而避免二次流制化某个属性。

l 当一个包含字符串属性时,它有可能代表一个文件路径、或资源名字。当是一个路径时,要把一个绝对路径转化为一个相对路径。

2、 组件和实体

它们的序列化,只需要处理它们的属性即可。

l 模板的ID

l 实体或组件的名字

l 实体或组件的master必须被流制化

l 序列化实体的可见性属性(hidden)

3、 场景

l 场景的名字

l 所有的Selection Set

l 场景中的所有实体

posted on 2011-02-27 14:29  arun  阅读(441)  评论(0编辑  收藏  举报

导航