• 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.
  • 相关阅读:
    北航2020OO第一单元博客作业
    OO第四单元总结
    OO第三单元总结
    OO第二单元总结
    OO第一单元总结
    北航2020年OO第四单元总结
    北航2020年OO第三单元总结
    北航2020年OO第二单元总结
    北航2020年OO第一单元总结
    面向对象第四单元总结
  • 原文地址:https://www.cnblogs.com/KevinYuen/p/2940488.html
Copyright © 2020-2023  润新知