分类:
2009-06-17 00:34:38
%var = new ObjectType(Name : CopySource, arg0, ..., argn) { [existing_field0 = InitialValue0;] ... [existing_fieldM = InitialValueM;] [dynamic_field0 = InitialValue0;] ... [dynamic_fieldN = InitialValueN;] }; |
创建编译时未知的类型,可以使用eval()函数。比如:
eval("new %myObjectType(SomeObjectName);"); |
会根据%myObjectType的值来创建对象。
一些创建对象的代码示例:
// 创建一个SimObject对象,不改动任何属性 $example_object = new SimObject();
// 创建一个SimObject对象,同时添加一个动态属性 $example_object = new SimObject() { a_new_field = "Hello world!"; };
// 使用datablock来创建对象 datablock StaticShapeData(MyFirstDataBlock) { shapeFile = "~/data/shapes/player/player.dts"; junkvar = "helloworld"; }; new StaticShape() { dataBlock = "MyFirstDataBlock"; position = "0.0 0.0 0.0"; rotation = "1 0 0 0"; scale = "1 1 1"; }; |
句柄(Handles)和名称(Names)
游戏中每一个对象都由两个参数定义和追踪:每个对象创建时有一个唯一的ID,就是句柄,也就是上面的%var,;名称是可选的Name。多数情况下,在调用对象时,二者可以互换,但必须注意:句柄是唯一的,而多个对象可以有相同的名字。
属性(Fields)和命令(Commands)
TorqueScript中的属性和命令就相当于C++的中成员(members)和函数(functions),也是C++一样,通过标准的“.”语法来调用。
动态属性
普通属性是某一个对象类型的所有实例都会有的属性,而动态属性则关联到某一个具体的对象。当你读一个不存在的属性时,仅仅会返回空字符串但是属性不会创建;但当你试图去写一个不存在的属性时,则会自动创建一个动态属性并赋值。