TAML是Toque Application Mark-up Language的缩写,贯穿这个Torque开发过程.TAML被设计的非常容易使用.
预备知识
在了解TAML之前需要前对Torquescript语法有所了解.
脚本导出方法
开始
TAML被设计的易于使用,比如下面的情况,代码简洁易懂:
// Create a sprite.
%obj = new Sprite();
// Write it out.
TamlWrite( %obj, "stuff.taml" );
写入XML文件后的结果为:
<Sprite/>
这个简单的例子体现了一个基本的原理,当TAML输出到XML文件的时候,会产生一个表明创建类型的节点,在这里这个XML节点类型为"Sprite".
上面说的是写入,下面是加载:
%obj = TamlRead( "stuff.taml" );
TAML 实例
上面展示了两个关于读写对象的简单全局方法.之所以称为简单,是因为两个方法隐藏了TAML的具体创建过程,例如前面的两个读写例子可以按照下面的写法:
// Create a sprite.
%obj = new Sprite();
// Create an instance of TAML.
%taml = new Taml();
// Write it out.
%taml.write( %obj, "stuff.taml" );
// Read it in using the same TAML instance.
%readObj = %taml.read( "stuff.taml" );
// Delete the instance of Taml.
%taml.delete();
TamlWrite和TamlRead隐藏了必要的创建和销毁TAML对象实例的过程,在许多情况下这是非常便捷的,这些方法不需要调用TAML实例化后所要暴露的其他TAML提供的接口便可以使用.
多种格式
TAML当前支持两种格式:
-
- XML
- Binary
XML格式提供了一种简单的编辑格式,在游戏开发阶段,比如编辑器,调用等过程中很有用,他的优点是便于编辑,但是同样有缺点,文件过大,太过冗长.
二进制格式不便于编辑,但是文件小,尤其是压缩过后.
TAML可以很容易的扩展,以便于支持更多种类型的编码格式.当然,所有的格式都必须是无损的,并且产生相同结果的以便于可以用一种格式读取,另一种格式保存.
这里有两种方法来选择使用哪种格式来进行读写,一种是显式的,一种是隐式的.
// Create a sprite.
%obj = new Sprite();
// Create an instance of TAML.
%taml = new Taml();
// Set the XML format.
%taml.Format = Xml;
// Write it out.
%taml.write( %obj, "stuff.taml" );
// Read it in.
%readObj = %taml.read( "stuff.taml" );
// Delete the instance of Taml.
%taml.delete();
// Create a sprite.
%obj = new Sprite();
// Create an instance of TAML.
%taml = new Taml();
// Set the Binary format.
%taml.Format = Binary;
// Write it out.
%taml.write( %obj, "stuff.baml" );
// Read it in.
%readObj = %taml.read( "stuff.baml" );
// Delete the instance of Taml.
%taml.delete();
显式调用Format设置格式.
在例子中的文件后缀".taml"和".baml"用来指定是XML文件和二进制文件,如果设置Format为Xml,但是保存的文件后缀为".baml",那么前面设定的Format将被忽略掉,保存为二进制格式文件.
下面是自动格式的读写:
// Create a sprite.
%obj = new Sprite();
// Create an instance of TAML.
%taml = new Taml();
// Write it out in XML.
%taml.write( %obj, "stuff.taml" );
// Write it out in Binary.
%taml.write( %obj, "stuff.baml" );
// Read it in.
%readObj1 = %taml.read( "stuff.taml" );
%readObj2 = %taml.read( "stuff.baml" );
// Delete the instance of Taml.
%taml.delete();
// Create a sprite.
%obj = new Sprite();
// Create an instance of TAML.
%taml = new Taml()
%taml.AutoFormatXmlExtension = "xml";
%taml.AutoFormatBinaryExtension = "bin";
// Write it out in XML.
%taml.write( %obj, "stuff.xml" );
// Write it out in Binary.
%taml.write( %obj, "stuff.bin" );
// Read it in.
%readObj1 = %taml.read( "stuff.xml" );
%readObj2 = %taml.read( "stuff.bin" );
// Delete the instance of Taml.
%taml.delete();
目前,TAML仅支持一种单一的文件扩展名,但是这个不重要.
当使用二进制格式的时候,你也可以指定是否进行压缩,这个压缩操作是默认执行的,除非你又不得已的原因需要关闭,具体控制方法如下:
-
- setBinaryCompression(true/false)
- getBinaryCompression()
- "BinaryCompression" field.
TamlRead and TamlWrite
全局TAML读写方法也支持格式和压缩参数的设定,如下:
// Create a sprite.
%obj = new Sprite();
// Write it out in XML.
TamlWrite( %obj, "stuff.txt", xml );
// Write it out in Binary.
TamlWrite( %obj, "stuff.dat1", binary );
// Write it out in Binary (with compression off).
TamlWrite( %obj, "stuff.dat2", binary, false );
写入默认值
TAMl在写入对象的时候,存在一个选择,是否将所有的属性(Filed)都写入到TAML文件中,因为写入的属性越多,那么文件越大,读取越慢,但是有很多的属性是默认值,没有必要存取的.
Torque提供了一个选择,是否全写入的开关,如下:
-
- setWriteDefaults(true/false)
- getWriteDefaults()
- "WriteDefaults" field.
默认情况下,开关是关闭的.
Progenitor Update
当你在Torquescript中创建了一个任意类型的实例时,这个实例会被打上创建它的脚本的文件名标记.
例如,在一个文件"\T2D\foo.cs"调用下面的代码:
{
// Create a sprite (this could be any SimObject).
%sprite = new Sprite();
// Echo the progenitor file.
echo( %sprite.getProgenitorFile() );
}
最终输出的就是"\T2D\foo.cs",因为是这个脚本创建了这个实例.
在调试的时候这个方法是非常有用的,但是和TAML有什么关系呢?因为TAML同样也能创建对象实例,并且这些实例并不是在脚本中定义而是在一个TAML格式的文件中.
- setProgenitorUpdate(true/false)
- getProgenitorUpdate()
- "ProgenitorUpdate" field.