如何在cocos2d中保持fps速率不变

时间:2010-11-28 12:19:20

标签: cocos2d-iphone

我有3个问题。

  1. 如何在cocos2d中保持fps速率恒定(几乎)。当在每秒(5-8)的小间隔内创建和删除大量CCSprite时,可以保持帧速率几乎不变??

  2. [self removeChild:sprite cleanup:YES]是否足够,或者我也应该使用

      CCTexture2D *texture = [sprite texture]; [[CCTextureCache sharedTextureCache] removeTexture: texture];
    
  3. 以下部分代码负责我的帧丢弃。如何以更好的方式完成相同的任务?

    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];  
    
    }
    
  4. 这称为每秒5-8次。因此帧速率下降。任何人都可以帮助我吗?

3 个答案:

答案 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];

此操作将从其父

中删除运行此操作的节点