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.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM