2009-03-31 4 views
1

Я хотел бы оживить несколько частей для игры, и я хотел бы, чтобы эти фигуры двигались в разных направлениях, поэтому мой текущий метод анимации всего вида больше не будет работать.Как мне сделать несколько анимаций на iPhone?

Мне интересно, что лучше всего подходит для анимации сразу нескольких элементов. (Обратите внимание, что я рендеринга в 2d, поэтому в настоящее время я не заинтересован в 3d soltuions.)

Спасибо!

+0

Какая техника вы используете сейчас, и вы пробовали Core Animation? –

+0

Я использовал преобразования основной анимации на одном представлении пользовательского интерфейса, в котором я центрировал свое изображение. – Skyler

ответ

8

Одинаково легко анимировать несколько двухмерных объектов одновременно. Есть два способа, которыми вы можете заняться: анимация UIViews или анимация CALayers. В моем тестировании я обнаружил небольшую разницу в производительности при анимации двух (оба, похоже, поддерживают ~ 50 объектов, перемещающихся одновременно в 60 FPS на iPhone).

Для координации анимации серии UIViews, вы хотите, чтобы обернуть любые изменения в геометрии обзора в BEGIN/фиксации блока анимации:

[UIView beginAnimations:nil context:NULL]; 
[UIView setAnimationDuration:ANIMATIONDURATIONINSECONDS]; 

view1.frame = CGRectMake(newX1, newY1, view1Width, view1Height); 
view2.frame = CGRectMake(newX2, newY2, view2Width, view2Height); 
// Add other views here 

[UIView commitAnimations]; 

Это будет координировать движение двух или более взгляды по прямой линии на новую позицию в течение продолжительности ANIMATIONDURATIONINSECONDS секунд. Если вы хотите, чтобы представления перемещались независимо друг от друга, создайте отдельные блоки анимации для каждого из них.

Для более полного контроля над анимацией или создания кросс-платформенного кода интерфейса Mac/iPhone вы можете использовать CALayers Core Animation. CALayers анимации по умолчанию, поэтому, установив

layer.position = CGPointMake(newX, newY); 

ваш слой будет автоматически анимировать в новое положение. Обратите внимание, что по умолчанию положение слоя относительно его центра, вы можете изменить его на нормальную исходную позицию, установив его свойство anchorPoint равным 0,0.

Вы можете координировать анимации слоя с использованием CATransaction:

[CATransaction begin]; 
[CATransaction setValue:[NSNumber numberWithFloat:ANIMATIONDURATIONINSECONDS] forKey:kCATransactionAnimationDuration];  
layer1.position = CGPointMake(newX1, newY1); 
layer2.position = CGPointMake(newX2, newY2); 
[CATransaction commit]; 

Для более продвинутых анимаций, вы можете создать CABasicAnimations и CAKeyframeAnimations и применять те, к вашим слоям, чтобы переместить их по сложным путям с конкретными сроками и ускорения/замедления ,

+0

Спасибо, Брэд, это очень хелфпен! – Skyler

0

Вы посмотрели проект Cocos2D-iphone?

Я считаю, что он очень прост в использовании и требует много работы из ваших рук.

Cocos2D iPhone

Он также делает много анимации и вы можете создать последовательности анимации, которые можно связать вместе.

Смежные вопросы