iPhone 용 OpenGL ES에서 2D 게임을 만드는 중입니다. (권장 함수 내에서 다시 나는 NSTimer를 실행 해요) 나는 'NO'로 설정 반복과 0.002 (60 FPS)의 간격으로 NSTimer를 사용하여 내 게임 루프를 호출하고 있습니다 :새로운 iPhone과 오래된 iPhone에서 일정 속도를 유지하려면 어떻게해야합니까?
-(void)gameLoop:(id)sender {
double currTime=(double)CACurrentMediaTime();
m_FPS_framesThisSecond++;
float timeThisSecond=currTime-m_FPS_lastSecondStart;
if (timeThisSecond>1.0f) {
m_FPS=m_FPS_framesThisSecond;
m_FPS_framesThisSecond=0;
m_FPS_lastSecondStart=currTime;
}
[game update];
[game render];
//Continue the loop
[NSTimer scheduledTimerWithTimeInterval:0.002 target:self selector:@selector(gameLoop:) userInfo:nil repeats:NO];
}
이 실행됩니다 부드럽게 내 3GS에서,하지만 2G에서 이것을 테스트하면 게임이 훨씬 느리게 실행되고 때때로 가끔씩 빈 프레임이 생깁니다. 간격을 0.033 (30fps)로 낮 춥니 다. 그것은 3G에서 너무 느립니다.
두 장치 모두에서 일관된 재생을 얻으려면 어떤 방법이 있어야한다는 것을 알고 있습니다. 낙서 점프는 두 휴대 전화에서 원활하게 동일한 프레임 속도로 실행되는 것으로 보입니다.
글쎄, 하드웨어 아키텍처를 언제 떠날 지에 대한 더러운 생각이 있습니다.애플은 iOS4에서 아이폰 2G (오리지널 아이폰)에 대한 공식 지원을 중단했다. 어쩌면, 미래의 OpenGL ES 업데이트가 3G 이상을 대상으로하기 때문에 (심지어 3G가 ES2를 지원하지 않더라도 Apple이 OpenGL ES2 장치 지원 시스템을 현재 출하하고있는 방식을 보는 것으로 볼 수 있기 때문에) . 당신에게 나쁜 질문이 있다는 것을 말하지 않고 (사실, 나는 그것을 +1했다) 단지 가끔은 앱의 미래도 고려해야한다고 말하고있다. – Jann
전 3GS 장치를 무시하고 싶습니다. (2G는 더 이상 알지 못합니다). 그러나 동시에, 나는 게임 속도와 프레임 속도를 분리해야한다고 생각합니다. 어쨌든, OpenGL ES2가 내 다음 노력이 될 것입니다! – Scott