Torque2D MIT 学习笔记(7) TAML的使用

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();
  
如你所见,这里没有任何地方显示设定Format,这是因为TAML根据对应的文件后缀决定了文件的格式.
你也可以改变后缀,像下面这个样子:
// 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"调用下面的代码:

function bar()
{
  // 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.
原文地址:https://www.cnblogs.com/KevinYuen/p/2940488.html