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 调度程序?的主要内容,如果未能解决你的问题,请参考以下文章