用PBE的TemplateManager我们能够实例化3种类型的类,他们是entity,template和group。他们都可以出现在xml文件当中。
当一个xml文件被加载以后,所有包含在xml文件都将之后在TemplateManager被实例化,注意:只是装载了一个对象的描述并不实际创建该对象。它必须被实例手动与TemplateManager。
Entities:
Entity tag 包含在xml文件当中是为了创建Ientity对象。IEntity基本上是一个组件集合命名容器,因此entity就是一个标签。Entity标签有是由很多的component标签组成。每一个描述不同的组建。Entity可以设置name属性也可以设置template属性。Template属性应当是指向xml对象的其他Template标签。
<entity name="Box2D">
<component type="com.pblabs.box2D.Box2DManagerComponent" name="Manager">
</component>
<component type="com.pblabs.box2D.Box2DDebugComponent" name="Debug">
<Scene componentReference="Scene"/>
</component>
</entity>
Templates
模板的构建和实体是一样的,同样包含template标签。和实体的唯一的区别是:模板是需要用NameManager管理的。但是实体是需要的。原因是,模板可以创建很多实例,而实体只能构建一个实例。
实体在xml文件中是不能当成模板来用的。所以当一个类需要继承自一个模板时,这个类只能被创建类template
Components
组建标签被包含在template和entity标签当中和描述一个组件。
组件标签有两个属性,都是在正常情况下使用。
第一个属性是type, 它指定该组件的完全限定类。所以,举例来说,一个命名空间中的com.pblabs.stupidSampleGame类DudeController组件将它的类型属性设置为“com.com.pblabs.stupidSampleGame.DudeController”。
第二个属性是name。这个名称在组件被实例化的时候被指向组件实例对象,在一个entity当中,组件的名称必须是唯一的。他使用于在entity查找该组件。
组件的其他属性可以以子标签的形式呈现。
<component name="Spatial">
<Position>
<x>706</x>
<y>450</y>
</Position>
</component>
Groups:
Group是在xml中描述的第三个对象。他实际上是一系列的templates、entities、groups.他们会在group被实例化的时候也被实例化。例如,如果定义有两个子标签“MyFirstEntity”和“MySecondEntity”,实例化group将实例化这两个实例。
Group子标签可以有两种标签,首先是objectReference,这是为模板和实体使用。二是groupReference,这是引用中使用的其他group.
<group name="Objects">
<objectReference name="Dude"/>
<objectReference name="Platform1"/>
<objectReference name="Platform2"/>
<objectReference name="Platform3"/>
</group>
<group name="Everything">
<!-- This is how you reference a group from inside another group. -->
<groupReference name="Managers"/>
<groupReference name="SpriteSheets"/>
<groupReference name="Objects"/>
</group>
Group不会对整个游戏的实例化产生影响,他只是为了方便一次实例化多个对象。
General Serialization(一般序列化)
Component标签可以包含该对象属性的子标签,如果component的代码中含有公共的属性"MyProperty",他的值就可以在xml中做如下的子标签:<MyProperty> 7 </ MyProperty> 。
如果一个组件有一个类的属性,它本身具有子属性,这些可以设置为好。例如,要设置一个点所谓的立场财产的价值,使用XML:
<Position>
<x>10</x>
<y>25</y>
</Position>
默认情况下,反序列化进程将自动推断出的类的类型来创建基于你的代码中指定的类型。您可以重写此行为使用类型属性。这将允许你实例化一个类的子类的预期。该类型的属性需要一个完全限定类名。