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.