Есть несколько SO вопросов, касающихся покадровой анимации (например, покадровая анимация и другие подобные вопросы), однако я чувствую, что у меня все по-другому, так что вот так.
Этоэто частично вопрос дизайна от человека с очень небольшим опытом работы с ios.
Я не уверен, что «кадр за кадром» - это правильное описание того, что я хочу сделать, поэтому позвольте мне это описать.По сути, у меня есть «сценарий» анимационного фильма, и я хотел бы сыграть этот сценарий.
Этот сценарий представляет собой файл json, который описывает набор сцен.В каждой сцене есть несколько элементов, таких как фоновое изображение, список актеров с их позициями и фоновый звуковой клип.Далее, для каждого актера и фона есть файл изображения, который представляет его.(это немного сложнее - у каждого актера есть «поведение», например, как он мигает, как он говорит и т. д.).Поэтому моя работа состоит в том, чтобы следовать заданному сценарию, ссылающемуся на актеров и фон, и с каждым кадром размещать актеров в их назначенном положении, рисовать правильный фон и воспроизводить звуковой файл.
Фильм может быть приостановлен, перемотан вперед или назад аналогичнок функциональности проигрывателя фильмов youtube.
Большинство вопросов, которые я видел, которые относятся к покадровой анимации, имеют другие требования, чем я (ниже я перечислю некоторые требования).Обычно они предлагают использовать animationImages свойство UIImageView .Это хорошо для анимации кнопки или флажка, но все они предполагают, что есть короткий и предопределенный набор изображений, которые необходимо воспроизвести.
Если бы я использовал анимацию изображений, мне пришлось бы предварительно создать все изображения вверхи я предполагаю, что он не будет масштабироваться (подумайте о 30 кадрах в секунду в течение одной минуты, вы получите 60 * 30 = 1800 изображений. Кроме того, в этом случае возможности скрабирования и паузы / воспроизведения кажутся сложными).
Так что я ищу правильный способ сделать это.Мой инстинкт, и я узнаю больше по ходу дела, состоит в том, что, вероятно, есть три или четыре основных способа достичь этого.
- Используя Core Animations и определяя «ключевые точки» и анимированные переходы b /ш эти ключевые точки.Например, если актер должен находиться в точке A в момент времени t1 и в точке B в момент времени t2, тогда все, что мне нужно, это оживить то, что находится между ними.В прошлом я делал нечто подобное в ActionScript, и это было приятно, но особенно сложно было реализовать действие «scrub» и синхронизировать все, поэтому я не большой поклонник этого подхода.Представьте, что вам нужно реализовать паузу в середине анимации или отсканировать ее до середины анимации.Это выполнимо, но не приятно.
- Установите таймер, скажем, 30 раз в секунду, и на каждом тике обращайтесь к модели (модель представляет собой json-файл сценария вместе с описанием актеров и фонов) и нарисуйте то, что нужно нарисовать вэтот раз.Используйте API Quartz 2D и drawRect.Это, вероятно, простой подход, но у меня нет достаточного опыта, чтобы сказать, насколько хорошо он будет работать на разных устройствах, вероятно, с точки зрения использования процессора, все зависит от количества вычислений, которое мне нужно сделать на каждом тике, и количестваУсилие требует IOS, чтобы нарисовать все.У меня нет предчувствия.
- Похоже на 2, но для рисования использую OpenGL.Я предпочитаю 2 b / c, API проще, но, возможно, OpenGL с точки зрения ресурсов более подходит.
- Используйте игровую среду, такую как cocos2d , которую я никогда раньше не использовал, но, похоже, это решаетболее или менее похожие проблемы.Похоже, у них хороший API, поэтому я был бы рад, если бы смог найти ответы на все их требования.
Поверх требований, которые я только что описал (воспроизведите фильм с его сценарием)файл и описание актеров, фонов и звуков), есть еще один набор требований -
- Фильм необходимо воспроизводить в полноэкранном режиме или в режиме частичного экрана (где остальная часть экранапосвящен другим элементам управления)
- Я начинаю с iphone, естественно, ipad должен следовать.
- Я бы хотел иметь возможность создать миниатюру этого фильма для использования на локальном телефоне (отобразить его в галерее в моем приложении). Миниатюра может быть просто первым кадром фильма.
- Я хочу иметь возможность "экспортировать" результат в виде фильма, который можно легко загрузить на YouTube или Facebook.
Таким образом, большой вопрос здесь заключается в том, может ли какая-либо из предложенных 1-4 реализаций, которые я имею в виду (или другие, которые вы могли бы предложить), каким-то образом экспортировать такой фильм.
Если все четыре не справляются с задачей экспорта фильма, я думаю об альтернативе. Альтернатива состоит в том, чтобы использовать сервер, который запускает ffmpeg и который принимает пачку всех изображений фильмов (мне нужно будет нарисовать их в телефоне и загрузить их на сервер по их последовательности), а затем сервер скомпилирует все изображения с саундтреком к одному фильму.
Очевидно, что для простоты я бы предпочел сделать это без сервера, то есть иметь возможность экспортировать фильм с iphone, но если это слишком много, то последнее требование будет, по крайней мере, иметь возможность экспортировать набор всех изображения (ключевые кадры в фильме), чтобы я мог связать их и загрузить на сервер.
Предполагается, что продолжительность фильма составляет одну или две минуты. Надеюсь, вопрос был не слишком длинным и что он понятен ...
Спасибо!