2011-01-25 20 views
1

背景:我使用了cocos2d-iphone开发游戏为iPhone/iPad的。我们的引擎为关卡设计者提供了通过在.plist文件中定义诸如速度,人工智能,武器和主要精灵纹理等属性来创建新的坏人的能力。在cocos2d-iphone中复制或创建CCNode游戏对象的最快方法是?

问题:目前,我们建立的所有原型的一个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引用?请简要说明提出解决方案的必要步骤。

一直在努力想解决这个问题了,而最有效的方法。我想知道是否有一种我没有想到的方法可能会更好?感谢您阅读这些。

回答

1

我采取的一种方法是在第一次加载资源时(比如在init中)预先创建一堆对象,在运行时只需更改其中一个资源就可以选择其中一个资源参数并将其从一个非活动对象数组移动到活动对象。

你可能没有创造出足够的,当然,但如果这些对象共享纹理,等等,那么你可能想创建它们作为CCBatchNode成员无论如何,使其更有效地吸引很多人。

+0

对我的情况来说这是一个绝妙的主意 - 谢谢。我们可以准确预测90%左右的原型中每一个会同时出现在关卡上并在关卡文件中进行定义。然后,只有需要更多 - 我们可以即时创建它们。我现在需要写的是我的实体基类中的一个“重置”方法,当它再次从队列中拉出时,它会恢复生命。 – 2011-02-03 09:17:46

相关问题