iOS анимация кадър по кадър с Quartz

Работя върху игра за iPhone, която включва само двуизмерна, базирана на превод анимация на само един обект. Този обект е подклас от UIView и е начертан с Quartz-2D. Преводът в момента се прилага от NSTimer, който отбелязва всеки кадър и казва на UIView да промени местоположението си.

Има обаче доста сложна математика, която стои зад определянето къде трябва да се премести UIView по време на следващия кадър. Тестването на играта на симулатора на iOS работи добре, но при тестване на iPhone определено изглежда, че пропуска кадри.

Въпросът ми е следният: методът ми за превод на изгледа кадър по кадър просто лош метод ли е? Знам, че OpenGL се използва по-често за игри, но изглежда жалко да се настройва OpenGL за такава проста анимация. Независимо от това, струва ли си да се мъчите?


person pinerd314159    schedule 30.07.2011    source източник


Отговори (2)


Трудно е да се каже, без да се знае какъв вид сложна математика се използва за изчисляване на преводите. Използването на OpenGL за това има смисъл само ако GPU наистина е тясното място. Подозирам, че това не е така, но трябва да тествате кои части причиняват пропуснатите кадри.

Като цяло UIView и CALayer се изпълняват върху OpenGL, така че анимирането на превода на UIView вече използва GPU.

Като настрана, използването на CADisplayLink вместо NSTimer вероятно би било по-добро за цикъл на игра.

person omz    schedule 30.07.2011
comment
CADisplayLink е добра идея, благодаря. Що се отнася до тясното място, някак си пропуснах да си спомня, че всъщност има друга анимация, която всъщност е поредица от редове, които актуализират всеки кадър. Осъзнавам, че това, което в момента е начертано с Quartz, вероятно е тясното място и трябва да се направи в OpenGL. - person pinerd314159; 31.07.2011

Проблемът със симулатора на iPhone е, че има достъп до същите ресурси като вашия Mac. Вашият Mac ram, видеокарта и т.н. Това, което бих предложил да направите, е да отворите instruments.app, който идва с iPhone SDK, и да използвате шаблона CoreAnimation, за да видите как се управляват вашите ресурси. Можете също така да погледнете разпределенията, за да видите дали това е нещо, което затруднява овен. Процесорът също може да помогне.

tl;dr iPhone sim използва вашия mac ram и GFX карта. Опитайте да погледнете последователността в Инструменти, за да видите дали има забавяне.

person Tim Davies    schedule 30.07.2011