Помощь · Поиск · Пользователи · Календарь
Полная версия этой страницы: Камера во Флэш
Flash Zone Forum > Macromedia Flash > Общие вопросы
HaWK
В одной из сцен моего мульта мне нужно чтобы экран плавно приближался к лицу героя с далёкого расстояния, но также мне нужно чтобы увиличение шло с определённой скоростью и временем. Помогите Пожалуйста!
DJKOT
 решение этой проблемы - Motion Tween

при должном упорстве по этой теме можно легко найти уроки, тем более такой вопрос уже не раз задавали))

многое можно почерпнуть здесь 
/s/flash-training/animatsija/

а кроме того, в данном случае нам потребуется не камеру к герою приближать, а наоборот.
HaWK
Цитата(DJKOT @ 12.05.2008 - 14:27) *
а кроме того, в данном случае нам потребуется не камеру к герою приближать, а наоборот.

Да, но в моей сцене также присутствует бэкграунд (деревья, дорога, Небо)! Как мне увиличить их вместе с героем к камере, одновременно чтобы создавалось ощущение, что камера приближается к герою, а не он к ней????????
MustLive
Цитата
В одной из сцен моего мульта мне нужно чтобы экран плавно приближался к лицу героя с далёкого расстояния

HaWK

Этот эффект достигается с помощью мовшонтвина. Причём приближение будет происходить за счёт увеличения объектов на сцене (в данном случае героя), о чём тебе уже сказал DJKOT. Также возможно использование маски или других методов для сокрытия данного процесса по краям ролика, что уже обсуждалось на форуме.

Цитата
Да, но в моей сцене также присутствует бэкграунд (деревья, дорога, Небо)!

В данном случае ты можешь сделать двумя способами: или пропорционально увеличивать и героя и бэкграунд, или увеличивать только героя (при этом получится интересный эффект, который ты мог встречать, когда увеличивается только герой, для акцентирования внимания на самом герое).
HaWK
Извините что так долго не отвечал, уезжал.
Ну так вот:
С помощью Motion Tween я делал увиличение не раз. В первом кадре герой стоит далеко от камеры,
а в последнем уже приблежённо (как мне надо) а анимация в свою очередь сама плавно приближает 
от первого состояния к нужному. Но проблема в том, что сначала анимация идёт быстро, а потом начинает 
тормозить. А мне нужно чтобы на протяжении увиличения анимация шла с одной скоростью.
MustLive
Цитата
Но проблема в том, что сначала анимация идёт быстро, а потом начинает
тормозить. А мне нужно чтобы на протяжении увиличения анимация шла с одной скоростью.

HaWK

Для этого тебе нужно сделать мовшон твин таким образом, чтобы добиться одинаковой скорости. Что можно сделать разбив мовшон твин на несколько мовшон твинов, каждый из которых будет сделан таким образом, чтобы добится одинаковой скорости на всех этапах процесса увеличения.
HaWK
Цитата(MustLive @ 1.06.2008 - 23:22) *
HaWK

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


Я чё-то не догоняю.........
okidoki
 добрый вечер, MustLive и остальные форумчане! сам я эту тему не подымал, но и ответа на этот вопрос не встречал. скажите, неужели моушшентвин - единственное решение? разве нет скрипта, который с заданной кратностью приблизит "экран" к заданным координатам?
HaWK
Цитата(okidoki @ 3.06.2008 - 01:15) *
добрый вечер, MustLive и остальные форумчане! сам я эту тему не подымал, но и ответа на этот вопрос не встречал. скажите, неужели моушшентвин - единственное решение? разве нет скрипта, который с заданной кратностью приблизит "экран" к заданным координатам?


Да точно, разве нельзя с помощью скрипта??????
DJKOT
 прошу прощения, но... в мультфильме с помощью скрипта ваять?)))

впрочем, решать вам....
HaWK
Я неверю, что больше нет других способов.....
MustLive
Цитата
Я неверю, что больше нет других способов.....

HaWK

Мовшон твин - это наиболее простое решение. Программная реализация зуминга весьма нетривиальна, поэтому проще сделать вручную мовшон твином.

Цитата
неужели моушшентвин - единственное решение? разве нет скрипта, который с заданной кратностью приблизит "экран" к заданным координатам?

okidoki

Я не встречал подобных скриптов. Если взять уже готовый скрипт, то особых проблем не возникнет (разве что с настройками скрипта, о чём я ещё скажу далее). Если же самому писать данный скрипт - а он весьма нетривиальный - то доведётся повозиться.

Сам флеш (до 8 включительно, не скажу за более новые версии) не имеет встроенных программных возможностей для зуминга. Поэтому зуминг нужно реализовать программно. А для этого нужно иметь перечень всех элементов на экране (чтобы у всех были имена и иметь список данных имён), что для программы, в частности игры, м.б. приемлемым, но для мультов м.б. неудобным - т.к. в каждой флешке нужно всем объектам присваивать имена и составлять список объектов. Далее алгоритм производит увеличение или уменьшение всех объектов на экране, тем самым осуществляя зуминг. Так что программная реализация зуминга во флеше достаточно трудоёмкая задача.
/2D/
 пишем наверх:
Код
this.onEnterFrame=function(){
this._xscale+=10
this._yscale+=10
}

ничего называть не надо)
MustLive
Цитата
пишем наверх:

/2D/

Это хорошо, что флеш поддерживает масштабирование и для рута. Причём в старых версиях также (в том числе в флеше 6). Только в реальных условиях нужно сделать выход из onEnterFrame, т.к. зуминг требуется ограниченный, иначе он будет бесконечным wink.gif.

Цитата
ничего называть не надо

В случае если нужен зуминг привязанный к координатам (0;0), то тогда данного кода хватит. Но обычно такой зуминг не нужен, а нужен зуминг в произвольной части экрана. Поэтому нужно смещение объектов на экране. Полноценный алгоритм зуминга, о котором я упоминал, может делать и масштабирование и смещение, что позволяет сделать зуминг в произвольной части экрана. При этом он требует указания имен для всех объектов и создания их списка.

Поэтому я реализовал смещение для рута (главной сцены), тем самым сделав зуминг по центру. Для создания зуминга в произвольной части экрана нужно задать соотвествующие настройки в данном алгоритме.

Для данного примера разместите нужные объекты на сцене и сделайте длительность ролика, к примеру, 30 кадров. В первом кадре укажите следующий код:
Код
this.onEnterFrame=function(){
this._x -= 10;
this._y -= 10;
this._xscale += 5;
this._yscale += 5;
}

А в 15 кадре следующий код:
Код
this.onEnterFrame=function(){
this._x += 10;
this._y += 10;
this._xscale -= 5;
this._yscale -= 5;
}

Это приведёт к тому, что камера будет циклично наезжать на объект и отъезжать от него.
kesh
 а как сделать что бы камера не наезжала на объект, а просто делала больше sad.gif
у меня весь процесс стоит из-за этого 
DJKOT
Motion Tween? Хотя не совсем понятен вопрос...
kesh
Цитата(MustLive @ 19.02.2009 - 22:01) *
/2D/

Это хорошо, что флеш поддерживает масштабирование и для рута. Причём в старых версиях также (в том числе в флеше 6). Только в реальных условиях нужно сделать выход из onEnterFrame, т.к. зуминг требуется ограниченный, иначе он будет бесконечным wink.gif.
В случае если нужен зуминг привязанный к координатам (0;0), то тогда данного кода хватит. Но обычно такой зуминг не нужен, а нужен зуминг в произвольной части экрана. Поэтому нужно смещение объектов на экране. Полноценный алгоритм зуминга, о котором я упоминал, может делать и масштабирование и смещение, что позволяет сделать зуминг в произвольной части экрана. При этом он требует указания имен для всех объектов и создания их списка.

Поэтому я реализовал смещение для рута (главной сцены), тем самым сделав зуминг по центру. Для создания зуминга в произвольной части экрана нужно задать соотвествующие настройки в данном алгоритме.

Для данного примера разместите нужные объекты на сцене и сделайте длительность ролика, к примеру, 30 кадров. В первом кадре укажите следующий код:
Код
this.onEnterFrame=function(){
this._x -= 10;
this._y -= 10;
this._xscale += 5;
this._yscale += 5;
}

А в 15 кадре следующий код:
Код
this.onEnterFrame=function(){
this._x += 10;
this._y += 10;
this._xscale -= 5;
this._yscale -= 5;
}

Это приведёт к тому, что камера будет циклично наезжать на объект и отъезжать от него.



нет без мовшен твин 
сразу делать зум на предмет
DJKOT
 а, так вот оно что... ну это по скриптовой части дельце. В принципе, если чуть-чуть поколдовать, то можно и вышеуказанный скриптик подогнать под эту задачу. Но в этих делах я, увы, не силен...
MustLive
Так и есть, как сказал DJKOT, мой вышеприведённый скрипт можно переделать в нужный для kesh код, чтобы был мгновенный зум.

Цитата
сразу делать зум на предмет

kesh

В моём коде зум происходит постепенно, а тебе нужно сделать его мгновенно. Для этого не нужно устанавливать функцию на onEnterFrame, а нужно сразу задать нужные значения свойств _x, _y, _xscale и _yscale. Параметры _x и _y задай такими, чтобы отцентрировать камеру. А параметры _xscale и _yscale задай такими, чтобы зазумился объект до нужного масштаба.
kesh
Цитата(MustLive @ 25.05.2011 - 00:20) *
Так и есть, как сказал DJKOT, мой вышеприведённый скрипт можно переделать в нужный для kesh код, чтобы был мгновенный зум.
kesh

В моём коде зум происходит постепенно, а тебе нужно сделать его мгновенно. Для этого не нужно устанавливать функцию на onEnterFrame, а нужно сразу задать нужные значения свойств _x, _y, _xscale и _yscale. Параметры _x и _y задай такими, чтобы отцентрировать камеру. А параметры _xscale и _yscale задай такими, чтобы зазумился объект до нужного масштаба.



я понял но не могу задать правильный алгоритм
посоветуй пожалуйста если экран 550х450
kesh
Цитата(MustLive @ 25.05.2011 - 00:20) *
Так и есть, как сказал DJKOT, мой вышеприведённый скрипт можно переделать в нужный для kesh код, чтобы был мгновенный зум.
kesh

В моём коде зум происходит постепенно, а тебе нужно сделать его мгновенно. Для этого не нужно устанавливать функцию на onEnterFrame, а нужно сразу задать нужные значения свойств _x, _y, _xscale и _yscale. Параметры _x и _y задай такими, чтобы отцентрировать камеру. А параметры _xscale и _yscale задай такими, чтобы зазумился объект до нужного масштаба.



спасибо 
помогло 
только как вернуться назад 
с такого положения 
MustLive
kesh

Всегда пожалуйста.

Для возврата назад тебе нужно проделать процедуру в обратном направлении. Т.е. задай тот же код для указания значений_x, _y, _xscale и _yscale, только с противоположным знаком. И камера вернётся в начальное положение.
tyranny
Спасибо! Использовал фичу в своей работе smile.gif
MustLive
Рад, tyranny, что пригодилось.

Для этого и описали данные алгоритмы плавного и резкого приближения.
Русская версия IP.Board © 2001-2014 IPS, Inc.