0

我正在开发一个游戏,我会更新玩家已经离开的高度。这是我的代码:

self.intScore++;
[self.lblScore setString:[NSString stringWithFormat:@"%d", self.intScore]];

但是当我用当前分数设置 lblScore 时,帧率从 60fps 下降到 40fps +-

我正在使用 iPhone 4 进行测试。

如果我评论 [self.lblScore... 则帧率保持在 60fps,但分数不会更新。

有什么建议吗?

4

2 回答 2

0

来自cocos2D 文档

更改字符串与创建新的 CCLabel 一样昂贵。要获得更好的性能,请使用 CCLabelAtlas

使用 aCCLabelAtlas来提高你的表现。

于 2012-06-23T21:50:23.400 回答
0

好的,这就是我为解决此问题所做的工作。

我有一个功能可以每毫秒更新一次分数,是的,这太糟糕了。所以我改变了分数更新发生的少一点。

我将此添加到 .h 文件中

@property (nonatomic,assign) int slowScore;

并将其添加到我在 .m 文件中的函数中

if(slowScore < 5){
  slowScore++;            
}else if(slowScore == 5){
  self.intScore = self.intScore + 5;
  slowScore = 0;
} 
[self.lblScore setString:[NSString stringWithFormat:@"%d", self.intScore]];

通过这样做,我能够保持相同的分数,但它会更新 leed 时间,通过这样做,我的帧率保持在 60fps :)

+1 @jonmorgan 建议更改 CCLabelAtlas。

我使用 CCLabelTTF 和 CCLabelAtlas 测试了我的新代码,并且都将帧速率保持在 60fps,但是使用代码的其他部分运行一些测试,CCLabelAtlas 的性能要好得多。

于 2012-06-25T01:49:18.453 回答