【问题标题】:How to keep fps rate constant in cocos2d如何在 cocos2d 中保持 fps 速率恒定
【发布时间】:2010-11-28 11:36:41
【问题描述】:

我有 3 个问题。

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

  2. [self removeChild:sprite cleanup:YES] 够用还是我也应该用

    CCTexture2D *texture = [精灵纹理]; [[CCTextureCache sharedTextureCache] removeTexture: 纹理];

  3. 以下代码部分负责我的丢帧。如何以更好的方式完成相同的任务-

    id 淡出 = [CCFadeOut actionWithDuration:1.4f];

id 调用 = [CCCallFunc 行动目标:自我 选择器:@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次。所以帧速率下降了。谁能帮帮我。

【问题讨论】:

    标签: cocos2d-iphone


    【解决方案1】:

    我猜测有问题的“粉碎精灵”可能是屏幕上可见的多个精灵之一,很可能共享相同的纹理(可能是精灵表的一部分,或者所有相同的图像等? )。

    如果是这种情况,我建议分配您的游戏需要在屏幕上显示的精灵数量,而不是“销毁”(删除它们,重新创建它们),而应该“重新使用它们”。

    在 NSMutableArray 中存储对所有 CCSprite 的引用,用您认为合适的精灵数量填充此数组(每秒删除多少精灵?每秒添加多少精灵?屏幕上有多少精灵开始?- 使用这些问题的答案来确定最合适的数组大小)。

    然后,与其将精灵作为一个孩子移除,不如简单地 [sprite setVisible: NO] 将其隐藏,然后……当您需要在屏幕上显示一个新精灵时,使用下一个“可用”(隐藏)精灵在数组中(使用索引跟踪最后一个“使用”精灵,并将其简单地增加 1 以找到下一个“可用”。一旦索引超出范围,将其重置为 0 - 此时,该精灵应该已被“粉碎”)。一旦你有了下一个“可用的”精灵,改变它的属性(位置,比例,纹理?,可见性)并应用任何适当的动作(不要忘记在“粉碎它”时“停止所有动作” - 这个是“清理:是”所做的)。

    如果您的游戏不允许您像这样在“圆圈”中四处走动,因为用户通过以不同顺序与精灵交互来决定什么可能可见或不可见,那么您可以存储对“粉碎的精灵”在一个单独的数组中(同时将它们保留在原始数组中 - 然后您可以从“未使用”数组中选择任何对象,将其从该数组中删除,然后如上所述进行更改)。

    这应该会显着降低帧速率下降,因为您不会一直创建和销毁精灵。


    可能发生的另一件事是您正在使用不同的图像,并且每个图像都单独存储(image1.png、image2.png、image3.png),并且这些图像的创建/销毁会导致纹理被删除并重新添加...来解决这个问题,创建一个精灵表并将精灵表添加到纹理缓存中,然后使用'spriteFromSpriteCacheName:@"image1.png"'创建你的图像

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 2021-12-23
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多