未绘制Cocos2d CCProgressTimer图像。为什么?

时间:2011-11-27 00:46:44

标签: iphone cocos2d-iphone

提前抱歉新手问题,但三天后我需要帮助。有人能帮助我吗?

我尝试将CCProgressTimer用于我的课程,我尝试将游戏图片预加载到CCTextureCache。我试图创建最简单的代码:

  • 使用图片“pathes”创建NSArray
  • 添加该阵列中的每个图像并同时更新进度条。

但是我的进度条在100%之前没有更新。我将NSLog跟踪添加到-(void)setPercentage:(float) percentage,看起来像是:

NSLog(@"percentage %f", percentage);
if(percentage_ != percentage) {
percentage_ = clampf( percentage, 0, 100);
[self updateProgress];
}

我看到添加每张图片的消息:

...
percentage 25
percentage 30
percentage 35
...

但进度条(图片)只有更新才会更新100.我认为[self updateProgress]应该在setPercentage的每次调用时更新进度图像。

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

Cocos2D的游戏循环如下:

  1. 更新
  2. 绘制
  3. 从1
  4. 重复

    现在你很可能在某种更新方法中加载纹理。这意味着它看起来像这样:

    • 加载纹理1
    • 更新百分比
    • 装载纹理2
    • 更新百分比
    • 装载纹理3
    • 更新百分比
    • 加载最后一个纹理
    • 将百分比更新为100%
    • 绘制进度计时器

    这意味着在加载所有图像之前不会绘制进度计时器。您可以通过在单独的线程上加载纹理,或者通过允许Cocos2D通过调度间隔为0的选择器来呈现每个更新来解决这个问题,这意味着选择器将每帧运行:

    -(id) init
    {
      …
      [self scheduleUpdate:@selector(loadTexture) interval:0];
    }
    
    -(void) loadTexture
    {
      if (no more textures)
      {
        [self unschedule:_cmd];
      }
      else
      {
        // load next texture
        // update progresstimer
      }
    }
    

    您必须向类实例添加必要的变量,最明显的是进度计时器和最后加载的纹理的索引。