[Name] [Size]
UINT8 1
UINT16 2
UINT32 4
UINT64 8
INT8 1
INT16 2
INT32 4
INT64 8
FLOAT 4
DOUBLE 8
VECTOR2 8
VECTOR3 12
VECTOR4 16
STRING N
UNICODE N
PYTHON N
PY_DICT N
PY_TUPLE N
PY_LIST N
ENTITYCALL N
BLOB N
为什么要使用类型别名?
开发人员可以更容易的理解类型的含义
您可以定义复杂的自定义类型
引擎可以自动识别数据类型进行网络传输和存储
文件目录地址 : assets/scripts/entity_defs/types.xml
<BOOL> UINT8 </BOOL>
<ENTITY_ID> INT32 </ENTITY_ID>
<ENTITY_FORBID_COUNTER> ARRAY <of> INT8 </of> </ENTITY_FORBID_COUNTER>
<ENTITYID_LIST> ARRAY <of> ENTITY_ID </of> </ENTITYID_LIST>
数据结构可以是一个类似于Python字典的结构,引擎可以根据用户的定义将这样一个结构的数据通过网络传输到目的地并还原成该结构,或者存储到数据库中以及从数据库中还原。
基本格式如下:
<类型名称> FIXED_DICT
// (可选实现)
// 使用此模块(xxx.inst)允许用户重定义该数据结构在内存中存在的形式,
// 当引擎进行数据存储或进行网络传输时必须还原成引擎原本的数据结构,引擎才可以识别和进行相关操作。
<implementedBy> xxx.inst </implementedBy>
// 这个数据结构的成员
<Properties>
// 字典的key
<keyName>
// 字典的值
<Type> 类型名称 </Type>
</keyName>
</Properties>
</类型名称>
关于implementedBy机制: 参看: 自定义类型
<AVATAR_INFOS> FIXED_DICT
<Properties>
<dbid>
<Type> DBID </Type>
</dbid>
<name>
<Type> UNICODE </Type>
</name>
<roleType>
<Type> UINT8 </Type>
</roleType>
<level>
<Type> UINT16 </Type>
</level>
</Properties>
</AVATAR_INFOS>
在内存中的默认形式:
AVATAR_INFOS = {"dbid" : 1, "name" : "kbengine", "roleType" : 1, "level" : 0}
<AVATAR_INFOS_LIST> FIXED_DICT
<implementedBy>AVATAR_INFOS.inst</implementedBy>
<Properties>
<values>
<Type> ARRAY <of> AVATAR_INFOS </of> </Type>
</values>
</Properties>
</AVATAR_INFOS_LIST>
在内存中的默认形式(如果没有实现implementedBy):
AVATAR_INFOS_LIST = {"values" : [{"dbid" : 1, "name" : "kbengine", "roleType" : 1, "level" : 0},
{"dbid" : 2, "name" : "kbengine1", "roleType" : 2, "level" : 1}]}
如果实现implementedBy, 用户可以将其在内存中存储为如下:
AVATAR_INFOS_LIST = {"kbengine" : {"dbid" : 1, "name" : "kbengine", "roleType" : 1, "level" : 0},
"kbengine1" : {"dbid" : 2, "name" : "kbengine1", "roleType" : 2, "level" : 1}}
<BAG> FIXED_DICT
<Properties>
<values>
<Type> ARRAY <of> ARRAY <of>INT64 </of> </of> </Type>
</values>
</Properties>
</BAG>
在内存中的默认形式(如果没有实现implementedBy):
BAG = {"values" : [[1,2,3], [4,5,6], [7,8,9]]}