Torque X使用模板系统来创建新的对象。一个模板就是一个普通的游戏对象,除了模板对象不可以在引擎中注册。取而代之的是,克隆一份模板,然后将这个模板对象注册到引擎中。
假设你有一个反坦克炮的游戏。玩家目标是摧毁所有燃料储罐。在游戏中会出现相当多的燃料罐。你需要配置一个基本的燃料罐对象,然后重复地创建燃料罐。在Torque X中,燃料罐对象被配置为一个模板。当你需要创建燃料罐时,就去克隆这个模板。克隆返回的对象等同于燃料罐模板。将它放置在合适的位置,然后注册它。现在你就拥有了一个燃料罐,并且原始的燃料罐模板依然能够被继续克隆。下面的代码描述了这个过程:
T2DSceneObject fuelTankTemplate = TorqueObjectDatabase.Instance.FindObject<T2DSceneObject>("FuelTank"); if (fuelTankTemplate != null) { T2DSceneObject fuelTank = (T2DSceneObject)fuelTankTemplate.Clone(); fuelTank.Position = new Vector2(50, -20); TorqueObjectDatabase.Instance.Register(fuelTank); }
注意,在克隆之前,我们必须确保模板不为空。这是一个好的习惯,因为模板可能不存在。例如,燃料罐模板被声明为levelData.txscene文件。这使得该模板能够更容易地从Torque X 2D引擎中移除。如果你没有检查它是否为空,那么当你试图去克隆该模板时,游戏将会异常中止。另外一个找到模板对象的方法如下所示:
// unsafe way to find a template object T2DSceneObject fuelTankTemplate = (T2DSceneObject)TorqueObjectDatabase.Instance.FindObject("FuelTank");
这个版本的确管用,但是当模板对象被找到但是并不是想要转换的类型,那么会抛出异常。出于这个原因,我们建议你使用FindObject的带参重载来完成查找模板的工作。
我们已经知道,模板和一个普通的对象是一样的,除了它的IsTemplate属性是true以外。下面是一个例子:
T2DSceneObject myTemplate = new T2DSceneObject(); myTemplate.Position = new Vector2(50, 50); myTemplate.Name = "Position5050Template"; myTemplate.IsTemplate = true;
在这个例子中,一份克隆自模板的对象的位置被设置为了50,50。但是此刻它不包含任何组件,且其他值都为默认值。所以在你真正能够使用这份克隆对象之前,你需要更多的配置代码。