我有3个问题。
如何在cocos2d中保持fps速率恒定(几乎)。当在每秒(5-8)的小间隔内创建和删除大量CCSprite时,可以保持帧速率几乎不变??
[self removeChild:sprite cleanup:YES]
是否足够,或者我也应该使用
CCTexture2D *texture = [sprite texture]; [[CCTextureCache sharedTextureCache] removeTexture: texture];
以下部分代码负责我的帧丢弃。如何以更好的方式完成相同的任务?
id fadeout = [CCFadeOut actionWithDuration:1.4f];
id call = [CCCallFunc actionWithTarget:self
selector:@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次。因此帧速率下降。任何人都可以帮助我吗?
答案 0 :(得分:0)
如果要在短期内重复使用纹理,则不应删除纹理。只有在性能方面存在很大缺陷时才会使记忆受益。
要保持恒定的帧速率,您可以尝试重用精灵而不是创建和删除精灵。您可以设置visible = NO并将其添加到未使用的精灵数组中,而不是调用removeChild。然后,当你需要一个新的精灵时,你会检查那个未使用的数组中是否有任何数据,如果它是空的,只会创建一个新数组。这样,您可以最大限度地减少创建和销毁的精灵数量。
答案 1 :(得分:0)
改变这个:
id call = [CCCallFunc actionWithTarget:self selector:@selector(RemoveSmashedSprite:)];
进入这个:
id call = [CCCallFuncN actionWithTarget:self selector:@selector(RemoveSmashedSprite:)];
答案 2 :(得分:0)
您可以使用删除操作作为上一个操作,而不是CCCallFunc。
id action = [CCActionRemove action];
此操作将从其父
中删除运行此操作的节点