我有三个问题。
[self removeChild:sprite cleanup:YES]
就足够了,还是我也应该使用?CCTexture2D *织构=精灵纹理;[CCTextureCache sharedTextureCache removeTexture:纹理];
id fadeout = CCFadeOut CCFadeOut
id call = CCCallFunc actionWithTarget:self选择器:@selector(RemoveSmashedSprite:);
CCSequence* sequence= [CCSequence actions:fadeout, call, nil];
[smash runAction:sequence];
和
-(void)RemoveSmashedSprite:(id)sender
{
CCSprite *sp = (CCSprite *)sender;
[self removeChild:sp cleanup:YES];
}
这被称为5-8次每second.So帧速率去down.Can任何人帮助我。
发布于 2010-12-28 06:38:35
我猜想,所讨论的“粉碎的精灵”可能是屏幕上可见的许多精灵之一,更有可能共享相同的纹理(可能是雪碧片的一部分,或者所有相同的图像,等等)。
如果是这样的话,我建议分配你的游戏需要在屏幕上拥有的精灵数量,而不是“销毁”(删除它们,重新创建它们),你应该“重用它们”。
将对所有CCSprite的引用存储在一个NSMutableArray中,用您认为合适的精灵数量填充这个数组(每秒移除多少个精灵?每秒加多少个精灵?屏幕上有多少精灵可以启动?-使用这些问题的答案来确定最合适的数组大小)。
然后,与其在孩提时删除雪碧,不如简单地雪碧setVisible:不隐藏它,那么.当您需要在屏幕上显示新的一个时,在数组中使用下一个"available“(隐藏的) sprite (用索引跟踪最后一个”已使用的“sprite ),然后简单地将其增加1以找到下一个”可用“。一旦索引超过界限,将其重置为0--此时,该雪碧应该已经被“粉碎”)。一旦你有了下一个“可用的”精灵,改变它的属性(位置、比例、纹理?、可见性),并应用任何适当的操作(不要忘记在“粉碎它”时“停止所有的操作”--这就是“清理:是”所做的)。
如果您的游戏不允许您在这样的“圆圈”中运行,因为用户通过以不同的顺序与精灵交互来决定什么是可见的,那么您可以将对“粉碎的精灵”的引用存储在一个单独的数组中(同时将它们保存在原始数组中--然后您可以从“未使用的”数组中选择anyObject,从该数组中删除它,然后如前所述修改它)。
这应该会大大减少你的帧速率下降,因为你不会一直创建和摧毁精灵。
另一件可能发生的事情是,您使用的是不同的图像,每个图像分别存储(image1.png,image2.png,image3.png),这些图像的创建/破坏导致纹理被删除并重新添加.要解决这个问题,请创建一个sprite工作表并将雪碧工作表添加到纹理缓存中,然后使用‘spriteFromSpriteCacheName:@“Image1.png”创建图像。
https://stackoverflow.com/questions/4296542
复制相似问题