2013-03-19 4 views
0

У меня есть задача, чтобы сделать простую анимацию для iPad2, как здесь: http://www.subaru.jp/legacy/b4/index2.htmlБыстрая анимация с большими изображениями

Пользователь может просто скользить влево и вправо, а объект визуально поворачивается по его вертикальной оси. Я думаю, что самый простой способ сделать это - использовать UIImage или CCSprite из cocos2d, установить массив с изображениями и изменять изображения, зависит от касаний. Размер изображений должен быть 1024x768 (полный экран) и не менее 15-20 изображений в секунду для более плавной анимации. Вопрос: возможно ли это сделать так гладко? Каков реальный предел для iPad2 для такой вещи. И если это за гранью, как я могу реализовать это поведение по-другому?

+0

Возможно, вы можете использовать видео и воспроизводить его в AVPlayerLayer? – Vladimir

+0

Но как я могу связать видео с контактами, и может ли он быть достаточно быстрым, чтобы реагировать на прикосновения? Я имею в виду, что пользователь может медленно или быстро перемещаться, а скорость анимации должна точно соответствовать скорости нажатия. – Alex

+0

Вам не нужно связывать видео с контактами. поместите видео в слой и добавьте пустой слой над ним, который включен касанием. Сделайте вашу обработку касания внутри этого слоя, тень к той, у которой есть видео. – YvesLeBorg

ответ

2

Хорошо, давайте запустим математику:

15 раз 1024x768 изображений в секунду. Если вы используете текстурные атласы 4096x4096, вы можете поместить их в единый атлас текстуры. Это занимает 1 секунду.

Это значит, что вам нужно загрузить другой атлас текстуры каждую секунду. В большинстве случаев вы можете иметь 2-3 таких текстурных атласа в памяти (консервативно каждый использует память 64 МБ).

Действительно единственный способ сделать это возможным - использовать атласы текстур .PVR.CCZ для увеличения времени загрузки и сокращения использования памяти. Вам все равно придется часто загружать/выгружать текстурные атласы (в течение нескольких секунд). Итак, вы должны проверить, насколько быстро загружается текстура 4k .PVR.CCZ и будет ли это влиять на скорость.

Если это слишком медленно (я подозреваю, что это будет так), вам придется использовать текстуры 1024x1024 .pvr.ccz (одиночные кадры) и дольше использовать кеширование 4 или более из них с использованием методов async CCTextureCache (и uncache текстуры, которую вы сейчас заменяете), так что загрузка новых текстур происходит в фоновом режиме и не влияет на скорость анимации.

Поскольку речь идет о вращении, вы должны убедиться, что в кеше должны быть по крайней мере один лучший два кадра в любом направлении. Поскольку вращение может происходить на разных скоростях, пользователь может по-прежнему испытывать задержки независимо.

Вы должны более точно уменьшить глубину цвета текстур как можно больше, пока это не повлияет на качество изображения слишком много.

Если вы примените все трюки в книге, я уверен, что это выполнимо. Но это не будет так просто, как «играть в анимацию» и сделать с ним. Если это то, что вы хотели знать.

1

Я делал что-то подобное раньше, но используя библиотеку JS с управлением UIWebView, имя библиотеки UIZE, проверьте это example. Я использовал его около 100 изображений размером 1024 × 655, и он настолько плавный.

Скачать библиотеку от размера, организовывать папки, как:

  • rotation3d
    • пример
      • 3d-вращение-viewer.html
  • изображения
    • Изображения файлы
    • расслоение плотной
    • Библиотека файлов.

В классе Objective-C, используйте следующий код для загрузки страницы HTML в UIWebView:

NSString *path = [[NSBundle mainBundle] 
        pathForResource:@"3d-rotation-viewer" 
        ofType:@"html" 
        inDirectory:@"rotation3d/example" ]; 

NSURL *urls = [NSURL fileURLWithPath:path]; 

NSString *theAbsoluteURLString = [urls absoluteString]; 

NSString *queryStrings = @"?param1=something";//Parameters to pass to your html page 

NSString *absoluteURLwithQueryString = [theAbsoluteURLString stringByAppendingString: queryStrings]; 

NSURL *finalURL = [NSURL URLWithString: absoluteURLwithQueryString]; 

NSURLRequest *request = [NSURLRequest requestWithURL:finalURL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:(NSTimeInterval)10.0 ]; 

[webViews loadRequest:request]; 
+0

Спасибо! Но я никогда не делал ничего подобного, так что вы можете объяснить немного больше? Как я могу использовать эту библиотеку в проекте iOS? – Alex

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