![]() |
|
Модераторы: SoWa |
![]()
|
|
| AlDev |
|
||||||||||||||||||||||||||||||||||||||
|
Опытный идиотъ ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1927 Регистрация: 17.4.2005 Где: Irk, rus Репутация: 9 Всего: 50 |
Ок. Получатеся небольшой туториал %)
Так. Платформа - Flash MX 2004. //------------------------------------------------------ 1. Для того, чтобы что-то сделать с цельным клипом, надо создать этот клип в библиотеке. 1.1. Для этого откроем библиотеку (F11). 1.2. Нажимаем на Create New Symbol 1.3. Пишем какое-либо имя клипа в поле Name. 1.4. Выставляем Behavior как MovieClip 1.5. Нажимаем ОК. 1.6. Рисуем что-либо в данном клипе, для того, чтобы тестировать наш эфект. 2. Теперь нам надо запрограммировать какие-либо эффекты для данного клипа. Способов в общем-то несколько. Например, можно прописывать весь код в Actions самого клипа, потом можно прописать Actions на сцене, ну и можно написать класс, наследуемый от MovieClip-а. Пойдём по 3-му пути. Итак, для начала создадим пустой файл с расширением as. Напишем в нём следующее
Сохраним этот файл в папке effects под именем zoom.as относительно расположения fla файла. Т.е. там-же, где лежит ваш fla файл создаём папку effects и сохраняем туда наш класс. effects - имя package zoom - имя класса. Оно должно совпадать с именем файла. Теперь о коде. extends означает, что класс является наседуемым от MovieClip. Возникает вопрос, как вызвать конструктор класса из fla файла. Всё очень просто. Вернёмся к нашему fla файлу. Выберем в библиотеке нужный клип, для которого мы создаём эффекты. Нажмём по нему правой кнопкой мыши и далее выберем пункт Linkage... Поставим галочку у Export for ActionScript, потом укажем ему AS 2.0 Class: effects.zoom. Теперь давим ОК. После сего действия выложим этот клип из библиотеки на сцену и запустим fla файл, нажав Ctrl + Enter. В результате в Ouput должна появиться надпись class constructor called, сообщающая нам о том, что был вызван конструктор класса. Всё. "Скелет" готов для дальнейшей разработки. Теперь вернёмся к нашему классу. Итак, мы будем делать эффект увеличения. Для этого будем использовать такие свойства MovieClip класса, как _xscale (масштаб по x в процентах) и _yscale (масштаб по y в процентах). Так-же мы должны установить максимальное и минимальное значение увелицения для удобства работы.
Что мы сделали? Мы установили две private переменных, содержащие maximum и minimum значения zoom и сделали доступ к ним с помощью get и set методов. Напишем метод, позволяющий увелисить масштаб клипа. Сделаем его private:
Так-как наш класс наследуемый от MovieClip-а, то обращаемся мы к нему соответственно с помощью this. v - значение масштаба. Теперь перегрузим следующие методы: onRollOver - вызываемый при наведении на клип курсора onRollOut - вызываемый при уходе курсора с клипа onDragOver - вызываемый при наведении на клип курсора, если при этом нажата левая кнопка мышки. onDragOut - выываемый при уходе курсора с клипа если при этом опять-таки нажата левая кнопка мышки.
Теперь при наведении курсора на клип у нас будет устанавливаться максимальное значение масштаба, А при его убирании с клипа - его минимальное значение. Теперь установим эти значения по-умолчанию, т.к. иногда влом прописывать одинаковые значения для большого числа элементов. Для этого вернймся к конструктору класса и напишем там следующее:
Вместо бывшего там trace. Итак, теперь у нас имеется элементарное увеличение и уменьшение. Возвращаемся в fla файл и , запустив его, любуемся. Итак, у нас получилось прстенькое увеличение. Теперь нам надо сделать так, чтобы оно было всегда по-центру. Для этого заведём переменные, в которых храниться начальная координата клипа относительно _parent клипа, а также размеры клипа и определим их значение при вызове конструктора:
Почему мы это сделали? При изменении масштаба изменится и размер клипа, потому нам надо знать начальное положение, чтобы отследить то, как изменится положение центра и вернуть его на место. Теперь исправим функцию set_scale:
в dx и dy храниться изменение положения координаты центра относительно начальной его координаты. У нас получилось простейшее центровое увеличение. Полностью код класса:
Однако хочется какой-нибудь красоты, например чтобы увеличение было постепенное, а не мгновенное. Тогда есть два варианта: 1. Использовать setInterval 2. Перегрузить onEnterFrame Всё-таки пусть будет setInterval. Итак, для начала определим несколько переменных в нашем классе:
current_zoom_value - текущее значение scale-а current_zoom_direction - идёт-ли увеличение или уменьшение (true - увеличение, false - уменьшение). _zoom_step - на сколько увеличится значение scale за один шаг _zoom_interval - собственно сам интервал _zoom_interval_value - шаг интервала в милисекундах (1/1000 секунды) Ну и определим их значения по-умолчанию в конструкторе:
Перепишем теперь функцию увеличения:
теперь посмотрим функцию set_scale_interval
В данной функции изменяется значение zoom-а, и вызывается set_scale_value метод класса.
ну эта функция нам уже знакома... теперь полностью код класса выглядит так:
Всё. Есть постепенное увеличение. Теперь надо сделать динамический контент клипа. Пусть в нём находится какая-либо картинка с адресом. Итак, пусть нам надо загрузить какую-либо картинку. Напишем функцию для её загрузки.
Ипользовали MovieClipLoader class. onLoadInit срабатывает при начале проигрывания подгружаемого клипа или отображении картинки. Таким образом там мы получаем размеры изображения (или клипа). Собственно, если очень хочется, то можно сделать и прелоадер для картинки:
Теперь как использовать это? В первом кадре клипа из библиотеки в Actions пишем:
this.image = ... вызывает наш метод set image. Который и загружает изображение. Всё. Получили класс, который позволяет увеличивать/уменьшать изображение и отображать картинку. Full source:
Если хотите запретить увеличение/уменьшение до загрцзки изображения, то введите Boolean переменную и потом проверяйте её значение при вызове метода set_scale. т.е.
Полностью исходники в Attachment. PS: Сори за такое оформление комментов, правильнее, конечно, так: http://www.simonwacker.com/blog/archives/000087.php Но я ещё не переучился Это сообщение отредактировал(а) Alex Batsuev - 21.4.2005, 06:48 Присоединённый файл ( Кол-во скачиваний: 2 )
Zoom_class4Vingrad.zip |
||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||
| Dimas22157 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Alex Batsuev
Класс эффект то что надо, может посоветуешь литературу какую почитать, а то я боюсь в будующем мне прийдется ни один такой стенд делать Теперь наверное вопрос гораздо по сложенее есть например зависимость y=ax+b у нас на экране есть только строка для написания числа , или лучше шкала, от 0 до 100, можем выбирать значения двигая по шкале стрелочку, выбрав нужное число нажимаем ок( выбирать можно много раз), и на графике по формуле строится зависимость ( сдесь эффект вот такой, от исходной точки 0 до точки графика линия зависимости небыстро ползет и в ней останавливается, если человек нажимет на следующее значение, то линия зависимости от уже предидущей точки медленно( секунды за 3-5) ползет к след точке, если человек выбирает точку меньшую чем предидущую , то график ползет назад)..... Спасибо за то , что рассматриваете вопросы.... Извините если задал уж очень сложное задание, но хотелось бы увидеть и понять как же во флеше происходит связка функция и вырисовка графика Спасибо заранее. |
|||
|
||||
| AlDev |
|
||||||||||||||||||||||||
|
Опытный идиотъ ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1927 Регистрация: 17.4.2005 Где: Irk, rus Репутация: 9 Всего: 50 |
Ещё один ман получается....
Ну да ладно, мож кто сжалится, да репутацию поднимет (Наглость не порок Ладна. Итак, задача построить график. Например линию. Пример графиков: http://anychart.com/products/anychart/2DLine.shtml Но то, что там сделано я описывать и писать не буду... сильно много... да и мне резона нет открывать свои исходники Ладна, это прелюдия, а теперь, как говориться, людия. [ Имеется массив значений ключевых точек и их аргументов. Требуется построить график по этим точкам в каком-либо клипе. Итак, опять-таки вернёмся к такой вещи, как объектно-ориентированное программирование во Flash. Требуется сделать класс, который будет строить график в клипе.
Итак, у нас есть размер области построения (width, height) и данные в двух массивах (values и arguments)
Ну и данные ессно должны как-то получатся, а т.к. они у нас private, то для них пропишем get и set методы.
Так, теперь установим значения chart area size при инициализации класса, и создадим пустой клип для графика
Итак, есть данные и есть размер области построения. Сначала посчитаем масштабы по оси ox и oy. Для этого нам надо получить максимальные и минимальные значения из массивов данных и завести переменные, где всё это будет храниться.
Определим методы для вычисления max и min.
Теперь можно и посчитать масштабы. определим отдельный метод:
Всё. Теперь можно и визуализировать график.
Ну и метод очистки:
Всё. Есть простейший график. Теперь сделаем так, чтобы можно было во время работы делать его перерисовку просто меняя данные. Для этого объявим переменную, которая будет показывать, нарисован график или нет:
И вернёмся к get/set методам нашего класса:
Всё. Теперь можно спокойно открыть fla-файл, сделать в библиотеке клип, нарисовать в нём прямоугольник для графика и поставьть AS2 класс chart. Полностью исходники класса:
PS: Я на работоспособность не проверял.... с ходу писал.... но вроде всё должно работать. Возможны ошибки и очепятки.... Вообщем удачи. Я тут только смысл объяснил.... Если нада продолжить - спрашивайте, что именно надо. |
||||||||||||||||||||||||
|
|||||||||||||||||||||||||
| Dimas22157 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Alex Batsuev
Извиняюсь за наглость, можно ли было по этому мануалу выложить конечные получившиеся fla и swf фаилы. Спасибо огромное за помощь, репутацию повысить не могу 100 постов нет Это сообщение отредактировал(а) Dimas22157 - 24.4.2005, 10:11 |
|||
|
||||
| AlDev |
|
|||
|
Опытный идиотъ ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1927 Регистрация: 17.4.2005 Где: Irk, rus Репутация: 9 Всего: 50 |
нету файлов... не делал... тут сразу писал...
|
|||
|
||||
| Dimas22157 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 17.4.2005 Репутация: нет Всего: нет |
Очепятки А то все это я боюсь пока не соберу |
|||
|
||||
![]()
|
| Правила форума "Flash" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, AlDev, SoWa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Flash | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |