首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在cocos2d中保持fps速率不变

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

Stack Overflow用户
提问于 2010-11-28 11:36:41
回答 1查看 1.8K关注 0票数 1

我有三个问题。

  1. 如何在cocos2d.When中保持fps速率不变(几乎),在每秒(5-8)的小间隔内创建和删除大量的fps,是否可以使帧速率保持最恒定?
  2. [self removeChild:sprite cleanup:YES]就足够了,还是我也应该使用?

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

  • 代码的以下部分负责以更好的方式完成相同的任务-

id fadeout = CCFadeOut CCFadeOut

id call = CCCallFunc actionWithTarget:self选择器:@selector(RemoveSmashedSprite:);

代码语言:javascript
运行
复制
CCSequence* sequence= [CCSequence actions:fadeout, call, nil];
[smash runAction:sequence];

代码语言:javascript
运行
复制
-(void)RemoveSmashedSprite:(id)sender
{


    CCSprite *sp = (CCSprite *)sender;



    [self removeChild:sp cleanup:YES];  

}

这被称为5-8次每second.So帧速率去down.Can任何人帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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”创建图像。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4296542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档