Здесь необходимо небольшое пояснение. Как видно из спецификации мы имеем три вида действия. Первый тип – вызов функции, второй – метода объекта, а третий тип – изменение параметра объекта. Когда нужно пользоваться тем или иным типом?
Все зависит от того, сколько действий будет выполнено за один такт (фрейм). Если это одно-два действия – то вызывается метод объекта (второй тип). Например – действия три и они должны выполнится за один такт:
Conv.put(MyClass, "firstMethod", 0);
Conv.put(MyClass, "secondMethod", 0);
Conv.put(MyClass, "thirdMethod", "1"); |
Как видно из примера – первые три действия имеют задержку – ноль, а третье действие имеет задержку в один кадр – и как следствие все три действия выполняются «одновременно» и действия которые будут дальше в списке, будут выполнены уже «в следующем фрейме».
Но иногда нужно сделать несколько действий за один фрейм с несколькими объектами или компонентами. Создавать большой список действий на один фрейм – неудобно и неоправданно (расходуются лишние ресурсы). При создании множества действий за один фрейм лучше воспользоваться функцией :
Conv.put(function()
{
_root.graphics_mc.line_1.setSize();
_root.graphics_mc.line_1._x = 0;
_root.graphics_mc.line_1._y = 0;
_root.graphics_mc.line_2.setSize();
_root.graphics_mc.line_2._x = 0;
_root.graphics_mc.line_2._y = 0;
_root.graphics_mc.line_3.setSize();
_root.graphics_mc.line_3._x = 0;
_root.graphics_mc.line_3._y = 0;
_root.graphics_mc.line_3.setSize();
_root.graphics_mc.line_3._x = 0;
_root.graphics_mc.line_3._y = 0;
}, "1"); |
Из примера видно, что объекты, с которыми работает функция – находятся в одном мувиклипе. В этом случае очевидна необходимость указывать пространство имен (scope) функции. И функция становится как бы «временным методом» мувиклипа. «Временный метод» необходим только в момент выполнения действия, и после выполнения действия он перестает существовать. Итак, когда нужно создать «временный метод» объекта лучше воспользоваться функцией с указанием пространства имен:
Conv.put(function()
{
this.line_1.setSize();
this.line_1._x = 0;
this.line_1._y = 0;
this.line_2.setSize();
this.line_2._x = 0;
this.line_2._y = 0;
this.line_3.setSize();
this.line_3._x = 0;
this.line_3._y = 0;
this.line_3.setSize();
this.line_3._x = 0;
this.line_3._y = 0;
}, _root.graphics_mc , "1"); |
Код выглядит яснее, и не теряются ресурсы на адресацию к мувиклипу. Указывать пространство имен необходимо практически во всех случаях применения действия–функции. Если только функция не глобальная. Например – setInterval , stopDrag , trace и так далее. В этом случае указывать пространство имен не нужно.
Когда нужно изменить значение объекта, и писать для этого специальный метод – неоправданно и изменяемых параметров не больше чем три – лучше воспользоваться третьим типом действия (изменение параметра объекта):
Conv.put(_root.graphics_mc.line_1, "_x", 0, 0);
Conv.put(_root.graphics_mc.line_1, "_y", "1", 0); |
Если же действий было бы больше чем три, нужно пользоваться приемом – «временный метод».
Еще раз суммируем информацию о методе put :
- Класс конвейера называется Conv .
- Метод put помещает команду в конвейер.
- Команда описывает в виде функции или метода объекта, и аргументов которые нужно передать.
- Важно запомнить последовательность описания команды: действие, задержка, список аргументов.
- Действие может быть описано функцией, методом (пара: ссылка на объект, имя метода), «временным методом» (пара: функция и ссылка на объект) и как поле объекта (пара: объект и имя поля).
- Команда имеет продолжительность (или задержку). Продолжительность команды это время между вызовом данной команды и вызовом следующей команды.
- Длительность команды может задаваться как во фреймах, так и в миллисекундах.
- Если время указывается во фреймах, то количество фреймов указывается как строка («1» - один фрейм), если нужно указать задержку в миллисекундах, то время задержки указывается как цифра (2000 – две секунды).
- Команда может не иметь задержки, и следующая команда будет выполнена сразу после выполнения текущей команды. В этом случае указывается задержка равная нулю.
- Команда может иметь произвольное количество аргументов, так и не иметь их.
Теперь еще раз посмотрим на код метода начала игры рулетки.
private function spin()
{
// заблокировать
// пользовательский интерфейс
this.lock();
// вычислить игровой результат
this.createGameResult();
// начать движение колеса
// (время 100 кадров)
Conv.put(this, "startWeel", "100");
// остановить колесо
Conv.put(this, "stopWeel", 0);
// озвучить игровой
// результат (время - две секунды)
Conv.put(this, "gameSounds", 2000);
// анимационно убрать
// проигравшие ставки
// (на каждую ставку по 50 кадров)
Conv.put(this, "looses",
String(this.looses_array.length*50));
// анимационно показать выигрыш
// всех выигравших
// (если такие имеются)
// на каждую ставку по 100 кадров
Conv.put(this, "wins",
String(this.wins_array.length*100));
// разблокировать интерфейс
// игрового приложения
Conv.put(this, "unlock", 0)
} |
Предыдущая часть | Следующая часть
[1] [2] [3] [4] [5] [6] [7]
|