Функции, Прототипы и прочие страшные звери флэшевого зоопарка
Функции, Прототипы и прочие страшные звери флэшевого зоопарка. Тема этого урока - функции и прототипы. (Тут я простейшим языком попытаюсь изложить то, о чем стал иметь представление лишь совсем недавно и поэтому, надеюсь буду понят новичками.) == ...о куличиках == ..Много байтов тому назад вдоль светлого пути Свящщеного Оптоволоконника подставлял свои песочные бока белому солнечному свету говорящий куличик... был он создан, как и все его братья по "разуму" из чистого песка, руками двулапых богов.. был он создан и был он сделан, но отличало его от других то ли по небрежности, то ли по случайности сделаная вмятина в светлом лике его.. .. и была она глубока и широка эта вмятина, как лунный кратер в полночь, но не будем об этом... ...а будем о том, как взбрело ему в ... то, чем куличики думают, вобщем... пришло то, что неплохо бы окружить себя верными собратиями.. .. по образу и подобию, да со вмятинами такими же... .. да в неисчислимых количествах .. .. и обратился он к богам Двулапым с воплями.. .. хочу, говорит, чтобы вмятина повторялась на всех моих копиях ... .. и вняли боги.. .. и взяли глину.. .. и слепили по образу и подобию форму ... .. и стала форма обратной копией поверности этого кулича .. .. и всяк песок, попав в нее становился похожим точ-в -точь на пра..на про... на праропрародителя... .. и был причислен кулич наш к лику ммм... .. и названа была форма "Святым Прототипом" ... .. и слагали оды программеры.. .. и флэшер радовался бытию... .. и все такое.. .. и с тех пор всяка вмятина, заведясь на поверхности, размножалась и отображалась на последующих копиях и повторялась и множилась неисчислимо.. .. и всякий догадливый, пожелая написать неприличное слово на боку каждого нового клип.. ээ... т.е кулича теперь не бегал ко всем подряд а сразу просто шел к "Прототипу" и заводил в нем это слово.. .. и оно тоже плодилось и повторялось сразу на всех... ======================================== Жила была функция. Жила и нихрена не делала. И звали её по всякому, ну просто кто как захочет. Только боялись ее, потому, наверное, что в школах учителя пугать любили двоечников эти страшным словом... И поэтому она нихрена не делала.. Пока не появились фигурные скобочки за ее спиной.. Да призадумались мыслящие, так как же заставить эту ФУНКЦИЮ работать.. делать то, что ей скажут.. И пришел ответ: надо ей просто сказать этой функции, что ей делать и она станет делать. А как же ей сказать? А очень просто. Внутри фигурных скобочек как здесь: {тут мы ей скажем, этой функции, что ей делать} только сначала мы ей придумаем имя. Любое, почти от балды. Скажем: 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