Назад в раздел
Функции, Прототипы и прочие страшные звери флэшевого зоопарка
div.main {margin-left: 20pt; margin-right: 20pt}
Функции, Прототипы и прочие страшные звери флэшевого зоопарка
Функции, Прототипы и прочие страшные звери флэшевого зоопарка.
Тема этого урока - функции и прототипы. (Тут я простейшим языком попытаюсь изложить то, о чем стал иметь представление лишь совсем недавно и поэтому, надеюсь буду понят новичками.)
== ...о куличиках == ..Много байтов тому назад вдоль светлого пути Свящщеного Оптоволоконника подставлял свои песочные бока белому солнечному свету говорящий куличик... был он создан, как и все его братья по "разуму" из чистого песка, руками двулапых богов.. был он создан и был он сделан, но отличало его от других то ли по небрежности, то ли по случайности сделаная вмятина в светлом лике его.. .. и была она глубока и широка эта вмятина, как лунный кратер в полночь, но не будем об этом... ...а будем о том, как взбрело ему в ... то, чем куличики думают, вобщем... пришло то, что неплохо бы окружить себя верными собратиями.. .. по образу и подобию, да со вмятинами такими же... .. да в неисчислимых количествах .. .. и обратился он к богам Двулапым с воплями.. .. хочу, говорит, чтобы вмятина повторялась на всех моих копиях ... .. и вняли боги.. .. и взяли глину.. .. и слепили по образу и подобию форму ... .. и стала форма обратной копией поверности этого кулича .. .. и всяк песок, попав в нее становился похожим точ-в -точь на пра..на про... на праропрародителя... .. и был причислен кулич наш к лику ммм... .. и названа была форма "Святым Прототипом" ... .. и слагали оды программеры.. .. и флэшер радовался бытию... .. и все такое.. .. и с тех пор всяка вмятина, заведясь на поверхности, размножалась и отображалась на последующих копиях и повторялась и множилась неисчислимо.. .. и всякий догадливый, пожелая написать неприличное слово на боку каждого нового клип.. ээ... т.е кулича теперь не бегал ко всем подряд а сразу просто шел к "Прототипу" и заводил в нем это слово.. .. и оно тоже плодилось и повторялось сразу на всех...
======================================== Жила была функция. Жила и нихрена не делала. И звали её по всякому, ну просто кто как захочет. Только боялись ее, потому, наверное, что в школах учителя пугать любили двоечников эти страшным словом... И поэтому она нихрена не делала.. Пока не появились фигурные скобочки за ее спиной.. Да призадумались мыслящие, так как же заставить эту ФУНКЦИЮ работать.. делать то, что ей скажут.. И пришел ответ: надо ей просто сказать этой функции, что ей делать и она станет делать. А как же ей сказать? А очень просто. Внутри фигурных скобочек как здесь: {тут мы ей скажем, этой функции, что ей делать} только сначала мы ей придумаем имя. Любое, почти от балды.
Скажем: YOprst
Годится? Почти шта. Только никто ее не признает как функцию, пока мы не напишем перед ней магическое слово function И так, теперь она имеет вид
function YOprst
но и этого недостаточно. всяка функция имеет еще круглые скобочки за собой
function YOprst() ,
которые могут быть как пустыми, так и забиты всякой ерундой, например:
function YOprst(a,b)
и теперь можно взять и добавить фигурные скобки
function YOprst(a,b){тут мы ей скажем, этой функции, что ей делать, например сложить А и Б}
и превратим эту ерунду в благочитаемый и понимаемый флэшем скрипт:
function YOprst(a,b){trace("a+b="+ (a+b))}
Все, что осталось, это взять эту функцию и поместить (вписать) в корень ("_root") флэша, например в первом кадре сцены просто написать
function YOprst(a,b){trace("a+b="+ (a+b))}
и потом вызвать её по имени, добавив, на всякий случай к имени "_root" через "." (точку) и так, написав следующее где - нибудь, во флэше (там где пишутся всякие скрипты):
_root.YOprst(2,2);
потом запустив флэш в режиме test movie мы, тем самым вызовем функцию, которая выполнит условие в своих фигурных скобках и получим выскочившее окно (output), в котором будет написано
4
то есть результат сложения двух переменных (чисел в скобках). .. вот так это все и работает .. ======================================== и так начнем.
1. Откроем редактор флэш 5 2. Сохраним файл с любым названием. 3. Нарисуем 5 - пять любых кнопок (надеюсь это Вы уже умеете делать). 4. И создадим текстовое поле, нажав на Text Tool (T) в панели инструментов флэша. 5. Откроем свойства текстового поля нажав на иконку в правом нижнем углу флэшового окна
(на рисунке под номером (1)) и зададим следующее: input text (на рисунке под номером (2)) и присвоим имя - переменную "text" (на рисунке под номером (3))
Этим мы создали динамическое текстовое поле для ввода символов. 6. Для урока нам еще потребуется экземпляр муви-клипа а) нарисуем маленький треугольничек (на рисунке под номером (4)) б) выделим его и нажмем F8 - сконвертируем его в Movie Clip
с) кликнем на нем левой, затем правой кнопкой мыши, в выпавше меню выберем panels>instance, в поле "instance name" введем mc
7. Удалим одну из нарисованых кнопок, для этого урока нам нужно всего четыре.
подготовительная часть завершена.
приступим к написанию скриптов. 1. Выделим первый кадр сцены и по правой кнопке мыши на кадре вызовем меню "actions" 2. В окне Object Actions (необходим режим эксперта CTRL+E) впишем:
======================================== //ЭТОТ КОД МОЖНО СКОПИРОВАТЬ ПРЯМО НАЧИНАЯ С ЭТОЙ СТРОКИ function hello1 () {trace ("hello, World!");} // ::::::::::::::::::::::: hello2 = function (word) { trace (word);}; // ::::::::::::::::::::::: hello3 = function (a, b) { c = a+b; stroka = "hello "+ c + " разa" trace (stroka); } // ::::::::::::::::::::::: MovieClip.prototype.toMouse = function () { speed = .25; x = this._x; y = this._y; xm = _root._xmouse; ym = _root._ymouse; this._x = x+(xm-x)*speed; this._y = y+(ym-y)*speed; } // ::::::::::::::::::::::: fscommand ("allowscale",0); // ::::::::::::::::::::::: Mouse.hide(); // © Willyam Bradberry 2001 //ЭТОТ КОД МОЖНО ВСТАВИТЬ ВО ФЛЭШ ПРЯМО ДО ЭТОЙ СТРОКИ (ВКЛЮЧАЯ ЕЁ ТОЖЕ)
Разберём то, что мы понаписали выше.
function hello1 () { trace ("hello, World!"); }
Как мы уже знаем функция начинается с ключевого слова function
потом пишется ее имя, потом задаются некоторые значения в круглых скобках(a,b,c), затем условие в фигурных скобках {}. Эта функция, при вызове ее в режиме Test Movie (CTRL + ENTER), выдаст окошко OUTPUT c текстом hello, World!
Приведем пример использования. Выделим одну из 4-х нарисованных кнопок. В окне Object Actions впишем (вариант1): on (release) { hello1(); } этот вариант подойдет для начала
вариант2 on (release) { _root.hello1(); }
этот вариант более универсален и грамотен, так как доступен в том случае, когда кнопка лежит внутри других муви-клипах. протестируем сцену (ctrl+ENTER) нажмем нашу кнопку, получим окошко OUTPUT c текстом
hello, World! ===============================
hello2 = function (word) { trace (word);}; Эта функция уже более продвинута по сравнению с первой в ней присутствует параметр "word", который ей передается при вызове.
Выделим вторую кнопку В окне Object Actions впишем (вариант1):
on (release) { word=_root.text; //присвоим ПЕРЕМЕННОЙ word ЗНАЧЕНИЕ ИЗ ТЕКСТОВОГО ПОЛЯ _root.hello2(word); }
Эта функция, при вызове ее (нажатии на кнопку 2) в режиме Test Movie (CTRL + ENTER), выдаст окошко OUTPUT c текстом, который мы введем предварительно в текстовое поле.
=============================== третья хункция уже умеет составлять строки и выполнять арифметические операции. Выделим третью кнопку (кнопка 3) и в окне Object Actions впишем:
on (release) { _root.hello3(1,2); //a=1, b=2 } что сделает эта функция: она возьмет первый параметр "а" прибавит к нему параметр "b" и приравняет все это переменной "с" (c = a+b)
затем она возьмет переменную "stroka" и составит строку из слова (string) "hello " прибавит нашу "с" и в конец строки допишет " раза"
в результате получим окошко OUTPUT c текстом
hello 3 раза ===============================
И напоследок познакомимся со страшным зверем - Прототипом. А страшен он потому, что позволяет через себя за один заход изменить весь внутренний мирок ВСЕХ подвластных флэшу объектов. На этот раз мы изменим, а точнее создадим небольшое свойство в объекте MovieClip. А именно - заставим его бегать за мышкой.. плавно...
Для начала мы напишем строчку кода
MovieClip.prototype.toMouse = function () { speed = .25; x = this._x; y = this._y; xm = _root._xmouse; ym = _root._ymouse; this._x = x+(xm-x)*speed; this._y = y+(ym-y)*speed; }
Где напишем? А все равно где. Она хороша тем, что должна везде работать. Можно, кстати уже не писать ее, мы, ведь уже ее написали раньше... ;)
и так что есть что:
toMouse = function () - имя функции (с этим мы уже знакомы)
MovieClip.prototype.toMouse = function () - MovieClip.prototype.toMouse говорит о том, что эту функцию мы заведем в ПРОТОТИПЕ муви-клипа, т.е. во ВСЕХ муви-клипах сразу. надеюсь, что такое прототип Вы уже имеете небольшое представление..
speed = .25 - придумаем переменную "speed" и понюхаем... эээ.. т.е. присвоем ей значение 0 целых 25 сотых (можно написать и 0.25 и .25 - флэшу одинаково параллельно)
x = this._x; y = this._y; - заведем еще парочку матерных переменных (ХУ), которые по идее будут воспринимать положение ОБЪЕКТА (нашего мувика тут) по осям _x и _у.
xm и ym - переменные, которые будут следить за нашей мышкой (xm... - не хмыкай, эт еще не все и не ym..ничай сильно=)
this._x = x+(xm-x)*speed; - ВОТ ОНА!!! наша формула, которая заставит наш ОБЪЕКТ (мувик, не пугайтесь) двигаться по оси "Х" this._y = y+(ym-y)*speed; - эта же формула сделает с ним тоже самое, но по оси "У"
работает эта формула просто: берет Х и прибавляет к нему кусочек расстояния между x и xm, разделенного на 25-сотых частей, тем самым сокращая это расстояние.
И ВСЁЁЁ =)...
И теперь, если мы хотим заставить любой movieClip летать за мышкой мы напишем в нем... ээээ.. Вобщем так: ткнем мышом в наш треугольничек "mc" И в окне Object Actions впишем:
onClipEvent (enterFrame) { toMouse(); }
и теперь, всякий мувик, в котором на onClipEvent (enterFrame) будет висеть вызов функции toMouse(); будет плавно летать за мышкой. ===============================
рассмотрим оставшиеся строчки в коде:
fscommand ("allowscale",0); - эта строчка сделает так, что в режиме test movie и при просмотре в плэйере размер нашей сцены останется одним и тем же.
Mouse.hide(); - эта строчка сныкает мышиный курсор от глаз злобных юзверей и заставит их жутко нервничать от того, что новый курсор (наш треугольничек) жутко тормозит на поворотах =).
// © Willyam Bradberry 2001 - эта строчка говорит, что все эту ерунду понаписал некто WB под своим настоящим псевдонимом и теперь этот код защищен российским "Законом Об Авторских Правах".
Все, что осталось Вам, это поблагодарить автора за труды его и громко произнести вслух - "Спасибо! Уильям !! Брэдберри!!!"
.. если Вы забудете это сделать, или, вдруг ваше чувство собственной важности не позволит, то я нисколько не обижусь =). Потому, что это все я написал от чистого сердца в благодарность своим учителям.
Всегда Ваш, Уильям Брэдберри, флэшер.
21:35 06.12.2001 |
Автор: © Уильям Брэдберри Источник:
http://www.flasher.ru
|
|
|
|