0

我有一個CADisplayLink符合Chipmunk物理,我得到非常緩慢的表現。我在CADisplayLink更新中調用了方法NSLog,它被稱爲平均每秒22次。我的印象是這應該更接近60.我有frameInterval設置爲1,所以應該是60fps,在一個完美的世界?德爾塔時間平均約爲0.0167秒(1/60是0.0167,這讓我更加困惑)。應該調用CADisplayLink的displayLink每秒多少次?

我的屏幕邊界四周只有8個圓形的屏幕,每次打電話時更新到UIButton個實例,所以我不認爲我正在做任何事情,這個程度在我的4S和iPad3上都是如此。我正在用一個單獨的方法每2.5秒對每個按鈕施加一次隨機的力。在模擬器中運行是平滑的,所以這是一個設備唯一的問題。任何人都可以幫助我找出造成經濟放緩的原因,以及我能做些什麼?

下面是相關的代碼,第一個是它建立鏈路:

[NSTimer scheduledTimerWithTimeInterval: 2.5f target: self selector: @selector(updateForces) userInfo: nil repeats: YES]; 
_displayLink = [CADisplayLink displayLinkWithTarget: self selector: @selector(update)]; 
_displayLink.frameInterval = 1; 
[_displayLink addToRunLoop: [NSRunLoop mainRunLoop] forMode: NSRunLoopCommonModes]; 

這裏是一個應該被稱爲(!我想)每秒60次的方法,但只有22個左右的被稱爲:

if (!gameIsPaused) { 
    cpFloat dt = _displayLink.duration * _displayLink.frameInterval; 
    cpSpaceStep([[AGChipmunkSpace sharedInstance] space], dt); 

    for (LCBall *i in balls) { 
     cpVect pos1 = cpBodyGetPos(i.body); 
     CGAffineTransform trans1 = CGAffineTransformMakeTranslation(pos1.x, pos1.y); 
     CGAffineTransform rot1 = CGAffineTransformMakeRotation(cpBodyGetAngle(i.body)); 
     i.button.transform = CGAffineTransformConcat(rot1, trans1); 
    } 
} 

最後,這裏有一個叫做每2.5秒方法,應用隨機力(updateForces):

if (!gameIsPaused) { 
    for (LCBall *i in balls) { 
     int randomAngle = arc4random() % 360; 
     CGPoint point1 = [self getVectorFromAngle: randomAngle AndMagnitude: (arc4random() % 40) + ((arc4random() % 20) + 15)]; 
     i.body -> f = cpv(point1.x, point1.y); 
    } 
} 

(另外,這裏是我的方法,從一個角度得到一個載體,我懷疑是造成問題):

angle = (angle/180.0) * M_PI; 
float x = magnitude * cos(angle); 
float y = magnitude * sin(angle); 
CGPoint point = CGPointMake(x, y); 
return point; 
+0

你可以在計時器分析器下運行這個工具,看看什麼是時間跨度。 – Metabble

+0

嗯。是的,除非比你想象的要多得多,否則你不應該遇到性能問題。只有分析器會告訴你任何有趣的事情。 – slembcke

回答

0

原來我有一個方法,在我的故事板不同UIViewController這是射擊每0.1幾秒鐘沒有關閉,並與物理處理相結合,使事情陷入困境。

相關問題