Torque X 官方文档中文译稿(6)——对象克隆和合并 博客分类: 游戏开发 360游戏框架XML
对象克隆和合并
Torque X提供了一个用于克隆和合并对象的支持复用的框架。克隆和合并这两个功能很相近,且不易理清。事实上,如果你没有通过克隆来创建你的对象,那么合并自然也不会起作用。但是这是无关紧要的,因为我们在以前已经强调过,你应该总是通过克隆来创建新对象。
对象克隆需要你实现所有对象和组件的CopyTo方法。CopyTo方法必须复制所有不带有TorqueCloneIgnore标志的公共属性。如果你这样做了却没有成功,你可以进入调试模式,通过断言(assert)来知晓到底需要添加哪一行代码。你可能会疑问,为什么你必须手动实现既然程序可以告诉你哪一行代码需要被添加呢?这样做的原因是XBOX360的框架中缺少一些反射的方法。所以,当你在360上调试时,断言也不会告知需要添加哪一行代码。
如果你选择使用对象合并,你必须确保所有的组件和对象都实现了IResetable接口,这样的话所有数据才可以被正确地初始化。假设你这样做了,开启对象合并的剩下一个步骤就是设置对象的Pool标志量或者PoolWithComponent标志量。你可以给一些对象设置标志量,另一些不设置,从而得到一个更为细致的关于哪些对象被合并的体会。Pool和PoolWithComponent的区别在于,如果Pool被设置了,那么你的对象和组件将会被存放在单独的池中。当你创建一个新对象时,来自各自池中的对象或组件合并,就好像它们被克隆一样。这样做带来的问题就是,对象和组件可以在内存的首尾两端结束,这有可能会导致CPU缓存策略失效。如果PoolWithComponent被设置,那么对象和组件将会被存放在一起。我们认为PoolWithComponent大多数情况下都是一个更好的选择。不过我们建议你自己去测试一下。
在游戏中创建新对象的标准方法是在xml文件中定义一个模板对象,然后每当你需要一个新对象时,就克隆一份。如果设置了对象的Pool和PoolWithComponent标志量中的任何一个,对象合并将会自动进行。