0

我有一组 CCSprite 对象,它们都添加到 CCLayer 中的批处理节点中。这些精灵应该在 CCLayer 的更新方法中更新它们的位置。FPS 为 60,场景开始时为 60,但随后急剧下降,直至达到 2 或 1 FPS!我的更新方法(每秒运行 60 次)看起来像这样

-(void)update:(ccTime)delta {

    for (int i = 0; i<spritesArray.count; i++) {

        ((CCSprite *)[spritesArray objectAtIndex:i]).position = ccp(..., ...);

    }
}
4

1 回答 1

0

只是为了让你的生活更轻松,迭代更快,代码更容易同时阅读,这里是如何使用快速枚举来做完全相同的事情:

-(void)update:(ccTime)delta 
{
    for (CCSprite* sprite in spritesArray)
    {
        sprite.position = ccp(..., ...);
    }
}

这更快,因为它为每次迭代删除了两个消息发送(计数和 objectAtIndex),加上由于首先使用快速枚举而进行的内部优化。

于 2013-09-16T11:21:05.823 回答