у меня аналогичная ситуация. Однако, если взять пример из приложения (ball_motion_04_click for trial.fla) то след остается. при этом заметил, что в моем проекте в поле "One item in library" виден кружок, в то время как в приложенном примере такого кружка нет. Вопрос знатокам, что не так? |
Интерфейсы AсtionScript
Мы создали функцию в памяти. Переменная hello содержит ссылку на эту функцию. Любая переменная, содержащая ссылку на функцию, может использоваться для выполнения этой функции посредством добавления пары скобок.
hello ();
Теперь мы можем передать эту ссылку другой переменной.
greeting = hello;
Здесь приветствие в переменной дает ссылку на функцию. Обе переменные теперь содержат ссылку на одну и ту же функцию. Теперь вы можете выполнить функцию следующим образом.
greeting();
Это действует даже для встроенных функций и специальных объектов во Flash. Например, у нас есть объект Math, содержащий метод random(). Это просто функция в памяти. Переменная random в объекте Math содержит ссылку на эту функцию. Мы можем взять эту ссылку и сохранить ее в любом нужном месте.
myRand = Math.random;
Теперь myRand содержит ссылку на функцию, которая будет возвращать случайное число. Вы можете вызвать ее так.
myRand();
Заметьте, что это выражение отличается от следующего.
myRand = Math.random();
В данном случае после имени функции поставлены скобки, поэтому функция и выполняется. Затем она будет возвращать случайное число и передавать его myRand. Это не совсем то, что нужно, но вы будете часто допускать эту ошибку. Даже я до сих пор это делаю!
Итак, возвращаемся к нашему коду. Теперь у вас должно быть более ясное представление о том, что здесь происходит.
function move() { this._x++; } mc1_mc.onEnterFrame = move;
Мы создаем функцию в памяти, move представляет ссылку на данную функцию и передает эту ссылку в mc1_mc.onEnterFrame. Внимание! Многие допускают ошибку, набирая следующий код.
mc1_mc.onEnterFrame = move();
Теперь вы должны понимать, почему эта структура не будет работать, и что на самом деле происходит.
Вы также можете прибегнуть к сокращенному методу определения управляющих элементов событий.
mc1_mc.onEnterFrame = function() { this._x++; };
Это можно интерпретировать как создание функции без имени.
function______________ () { this._x++; }
Ссылка на функцию не передается переменной, а выражение выше само по себе при запуске дает в результате ссылку на функцию. Поэтому мы можем взять результат определения функции и присвоить его прямо управляющему элементу события.
mc1_mc.onEnterFrame=function______________________ () { this._x++; };
Безусловно, мы привели длинный пробел в строке для полноты представления. На самом деле нужно писать так, как показано в первом примере выше. Этот метод полезен, когда вы знаете, что вы будете присваивать функцию только один раз и только одному управляющему элементу.
Также обратите внимание на точку с запятой в конце строки. Весь этот блок кода является одним выражением присвоения, и, следовательно, должен заканчиваться точкой с запятой, хотя правилами синтаксиса она не требуется. После определения функций самих по себе точку с запятой можно не ставить.