FPS Lag 调度程序?

Posted

技术标签:

【中文标题】FPS Lag 调度程序?【英文标题】:FPS Lag scheduler? 【发布时间】:2013-08-23 21:29:43 【问题描述】:

我遇到了 FPS 延迟。我环顾四周,人们说要使用

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

当我使用它时,我会遇到不稳定的延迟。但是当我使用

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

流畅多了。这是我的运动代码的sn-p。

- (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];
        
    

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

【问题讨论】:

不要按时间间隔进行调度,调度程序已经与帧率绑定,所以它不会更好地工作,最坏的情况是它只会每隔一帧执行一次选择器 ps:使用 Instruments 并找出究竟是什么让您的应用变慢了。 【参考方案1】:

根据给出的信息,很难说是什么让您的应用程序变慢了。正如 LearnCocos2D 建议的那样,您可以使用 Instruments 来找出慢的东西在哪里。或者,如果您想获得非常精细的分析,您可以随时在代码中使用以下宏:

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

使用前,请务必在使用范围内声明NSDate *start。然后只需将一系列 TIC/TOC 或 TIC/TOCP 对放入您的代码中,即可打印出您的代码在不同位置的时间。通过这种方式,您可以很快找到瓶颈。

【讨论】:

以上是关于FPS Lag 调度程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用Fraps获取3D程序的FPS

opencv获取变量中的fps

在QML中显示FPS

Qt QML:限制最大FPS

使用 AVAssetWriter 和 CoreML 的相机上的 FPS 不一致

将我的 iPhone 项目升级到通用。 CADisplayLink 现在只有 30fps