Gamebryo3.0SDK翻译-Entity

一、 概述

1. 简介

由于实体通常是有Model来定义的,所以在创建实体时必须知道model ID。所有的模型定义都被封装在一个FlatModel类中(它封装了model的所有属性和行为),每个entity包含了一个flatmodel实例。对于实体的属性支持“clone-on-write”。这样可以使得实体所占的内存达到最小。如,名字和其它一些属性不用包含在真正的实体中,可以通过getpropertyname()在flatmodel中寻找。当一个实体被初始化时,会从它对应的flatmodel中“克隆”所有的属性,这种方式使得所创实体中只需保存这些属性的引用即可。

Entity:是一个游戏对象,每一个Entity都会有一个全局ID-EntityID,包含一个Proterty set和一个Behavior map

Properity:每一个model包含一个名字、Model ID,和一些默认的属性值。

Behavior

Mix-in Model Hierarchy相当与继承。

FlatModel它使得所有继承的东西放到一个文件中。FlatModel文件在EMT中生成。

2. 实体时如何工作的

实体可以向c++对象那样被创建,他的所有属性可以通过PropertyID或Proterty name来找到。每一个实体拥有一个数据驱动FlatModel,FlatModel包含了所有继承的相关信息。除非修改了属性,要不然实体不需要存储任何属性。如果改变实体会建立相关属性以及值。

实体可以通过内建模型(build-in models)创建。内建模型作为一种模型的规则在EMT中被定义。IBuiltinModel作为一个c++类会自动创建、并且连接到一个继承于它的实体。IBuiltinModel提供了一些设置和获取相关数据属性的方法;同时支持行为的“投递机制”,所有属性的获取和设置以及行为的调用都是通过IBuiltinModel。

实体可以被它自己、其它实体、以及系统服务使用。通过c++的API可以直接设置和获取属性以及发起(invoke)行为。通过向scheduler发送消息来发起行为,Scheduler这些行为进行排队。在函数Scheduler::OnTick中,Scheduler会通过请求的类型、实体的订阅、可用行为。不是在每一次OnTick都会执行所有实体的所有行为。这些行为可以根据需要被延迟处理。

当调用Entity::CallImmiateBehavior时该行为会被立即执行,而不需要在Scheduler中排队。

3. 实体的限制

4. 操作实体

二、使用Entity

1途径:EMT和World Builder创建、通过程序创建(c++orLua)

2通过加载场景来自动创建Entity

1. Create the model using the Entity Modeling Tool. See Creating/Adding Entity Models to a Project.

2. Create a world in World Builder. See Adding Content to your Game Solution.

3. Include your model(s) in the world. See Creating an entity.

4. Save (export) the world. See Saving Content within your Game Solution.

5. In your application load this world file. See About loading assets.

EntityLoaderService将解析场景文件,同时加载Entity。

4程序创建Entity的方法

1. Get pointers to the required services.

2. TS_ASSERT(pServiceManager);

3. FlatModelManager* pFlatModelManager= pServiceManager->GetSystemServiceAs<FlatModelManager>();

4. TS_ASSERT(pFlatModelManager);

5. EntityManager* pEntityManager= pServiceManager->GetSystemServiceAs<EntityManager>();

6. TS_ASSERT(pEntityManager);

7. Choose which model type to load.

8. EntityPtr pEntity = pFlatModelManager->FactoryEntity("MyModel");

9. TS_ASSERT(pEntity);

10. Add the entity to the scheduler.

11. pEntityManager->AddEntity(pEntity);

Now that you have an entity pointer, you can start directly using it.

5程序销毁Entity:如果是场景文件(Xblock文件)中的Entity,当xblock卸载时它会自动销毁。如果时程序中实时生成的实体可以通过以下方法来销毁

(1)

clip_image002

(2)

clip_image004

二、使用Entity

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

导航