GLKViewController: қате fps

Бірнеше GLKViewController сарапшыларының бар екеніне үміттенемін, себебі кейбір қиындықтар бар :)

Қолданбамның жылдам сипаттамасы. Менде әр түрлі экрандарды көтеретін UINavigationController бар.

At some point, I get to my game screen which is a subclass of UINavigationController. In this screen, in viewDidLoad I manually create a EAGLContext, GLKView and instantiate a new GLKViewController (to handle my update&draw calls).

Мен 30-ға жуық қимылдарды таңдаймын.

Мәселе мынада, алғашқы 3-4 жаңарту қоңыраулары дұрыс DT-мен келеді, бірақ менде 2-3 секунд ішінде 1 секунд бар. Мен controller.timeSinceLastUpdate арқылы DT өлшемін өлшеймін. Маған ұнайды:

dt=0.33
dt=0.33
dt=0.33
dt=1.07
dt=1.05
dt=0.33
dt=0.33

After this, I get valid only DT times. I have no idea why those frames have that kind of delay. I measured the time it takes me in the update & draw method, and it's nowhere near 1 second.

Сондай-ақ, мен ешқандай текстураны жүктемеймін/геометрияны құра алмаймын. Бәрі жүктеу кезінде жасалады, себебі бұл өте кішкентай ойын.

Сондай-ақ, мен ойын экраны контроллерін ойнатып, одан кейін ойын экраны басқа нұсқасын қайтадан жіберсем, бұл жаңа GLKViewController менің жаңару әдісін тек әр секунд сайын ғана шақырады.

GLKViewController қолданған кезде кез-келген адамға кадр жиілігімен қиындық бар ма?

Рахмет,

1

2 жауаптар

Мәселе мынада, сіз өзіңіздің жаңартуларыңыз арасында құрылғының тағы не істейтінін білмейсіз

Келесі фреймде жұмыс істейтін 0.1-ді ғана жұмсауға болады, бірақ жад туралы ескерту болса, сіздің бағдарламаңыздың басқа беттері өңдеуге уақытты алады. Менің ойымша, gl контроллері артықшылықты кадрлар жылдамдығын сақтауға барынша қолайлы болады, бірақ егер лоттар фонда жүрсе, онда бұл туралы көп нәрсе жасай алмайды.

Кодыңыздың мүмкіндігінше тезірек көрсетілуіне көз жеткізгеніңізге дейін және кадрлар жиілігімен дәл осылай көрінбесе, онда бұл сіздің көрсету жолыңыз емес. Сіздің сұрағыңыздан бұл сіз оны сынап көргендей көрінеді.

Сіз жасай алатын басқа нәрсе - бұл сіздің қолданбаңызға жіберілуі мүмкін басқа ескертулерді (яғни жады туралы ескертулер) қадағалап отыру.

Соңында, баяу кадрларға арналған үлгі бар ма - олар жүктелетін жаңа кескінге не файлға қол жеткізуге сай келеді ме? Сіз алдын-ала мүмкіндігінше көп жасадыңыз ба? EDIT - сіздің сұрағыңызды қайтадан ойлануды сіз мұны жасадыңыз деп ойлаймын, кешіріңіз!

Кешіріңіз, мен бұдан былай қолданамын :(

1
қосылды
Жауап үшін рақмет. Мен көрген жалғыз әңгімелесуші мен айтқанымдай. Алғаш рет бұл ойынға үлкен назар аударамын (2-3) кадрлардан кейін бірінші рет ойын экранына кіремін. Егер мен негізгі мәзірге қайта оралсам және ойынға тағы бір рет кіруге тырысатын болсам, тек 1 секундқа созылған рамкалар ғана аламын. Мен бұл туралы тергеуді жалғастыра беремін, ал егер бір нәрсе тапсам, оны осында орналастырамын.
қосылды автор Andrei Stanescu, көзі

Жарайды, мен оны ақырында ойлап таптым. Бұл тіпті GLKViewController-ға қатысы жоқ (тосын сыйлық!).

Ойын экраны көрініс контроллерін көрсеткендей, бұл келесідей:

    GameAreaViewController* gameController = [[GameAreaViewController alloc] init];

    [UIView beginAnimations:@"animation" context:nil];
    [self.navigationController pushViewController: gameController animated:NO]; 
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.navigationController.view cache:NO]; 
    [UIView setAnimationDuration:0.7f];
    [UIView commitAnimations];        

    SAFE_DEL(gameController);

Егер анимацияны 0,3 ф-ны қолдансам, онда мен ешқандай артта қалмаймын. Кейде кейде 0,5п, ал мен оны 0,7-де әрдайым аламын.

0
қосылды