FPS滞后调度程序?

时间:2013-08-23 21:29:43

标签: iphone ios objective-c cocos2d-iphone

我一直在获得FPS滞后。我环顾四周,人们说使用

[self schedule:@selector(gameLoop:) interval: 1/60.0f];

当我使用它时,我得到了波动的延迟。但是当我使用

[self schedule:@selector(gameLoop:)];

它更顺畅。这是我的移动代码的片段。

- (void)gameLoop :(ccTime)dt
{
    [self manageCannon:dt];
    [self manageBullets:dt];
    [self manageEnemies:dt];
    [self manageAllies:dt];
}
- (void) manageEnemies :(ccTime)dt
{
    enemyClass *tempEnemy;
    for(int i = 0; i < [enemies count]; i++)
    {
        tempEnemy = [enemyClass new];
        tempEnemy = [enemies objectAtIndex:i];

        tempEnemy.position = ccp(tempEnemy.position.x-tempEnemy.speed*dt,tempEnemy.position.y);

        if((tempEnemy.position.x - tempEnemy.range) < [wall getwally])
        {
            tempEnemy.speed = 0;
        }
        if(tempEnemy.health < 1)
        {
            tempEnemy.alive = false;
        }

        if(tempEnemy.alive == false)
        {
            [enemies removeObjectAtIndex:i];
            [tempEnemy removeFromParentAndCleanup:true];
        }
    }
}

我总是尝试从头开始编写自己的代码,所以如果你可以帮我解决其他我正在做的事情,这对我来说是非常有帮助的。

1 个答案:

答案 0 :(得分:0)

很难说从您给出的信息中减慢您的应用程序的速度。正如LearnCocos2D建议的那样,您可以使用Instruments来找出缓慢的东西。或者,如果要进行非常精细的分析,可以始终在代码中使用以下宏:

#define TIC start = [NSDate date]
#define TOC -[start timeIntervalSinceNow]
#define TOCP NSLog(@"TIME: %f", TOC)

使用前,请务必在使用范围内声明NSDate *start。然后在代码中添加一系列TIC / TOC或TIC / TOCP对,以打印出代码在不同位置所用的时间。你可以很快找到瓶颈。