背景:我正在使用cocos2d-iphone为iPhone / iPad开发游戏。我们的引擎通过在.plist文件中定义一些属性(如速度,AI,武器和主精灵纹理),为关卡设计师提供创建新坏人的能力。
问题:目前,我们在关卡开始之前构建了所有原型的NSDictionary。对于每个实体,我们存储一个类名和一个NSDictionary,描述构建该实体的新实例所需的参数。我们在加载时创建每个原型的实例以预先处理纹理,但立即将其销毁。当一个新的坏人产生时,我们使用存储的NSDictionary并将其传递给init方法,如此(为简洁而删除了错误检查);
IKPrototype* prototype = [prototypes objectForKey:prototypeID];
IKBaseEntity* entity = [[[NSClassFromString([prototype prototypeClass]) alloc] init] autorelease];
[entity setPrototypeID:prototypeID];
[entity parseParameters:[prototype parameters]];
return entity;
现在,这是一种享受 - 但是当引擎解析参数(有时是20-30个值)时,在同一帧中创建多个项目符号会导致明显的减速(一帧或两帧掉线)。但是,它们每次都基本相同,只有在添加到世界时才会发生变化(稍后会发生)。
问题:什么是最有效的方法来存储原型对象以便生成以后的重复项。序列化/反序列化是否适用于CCNode的子类,它会比我正在做的更快吗?将最终对象的副本存储在我的原型类中,然后对该对象进行“深层复制”以进行生成会更好吗?如果我这样做,我是否必须担心CCTexture引用?请简要说明建议的解决方案所需的步骤。
一直试图想出解决这个问题的最有效方法。我想知道是否有一种我没想过的方法可能会更好?感谢您阅读此内容。
答案 0 :(得分:1)
我采取的一种方法是在您第一次加载资源时预先创建一堆对象(例如在init中),只需更改其参数即可在运行时选择其中一个资源并将其从非活动对象数组移动到活动对象。
当然,你可能没有创建足够的东西,但是如果这些对象共享纹理等,那么你可能想要将它们创建为CCBatchNode的成员并使其更有效地绘制许多他们。