ИГРОДЕЛ
Войдите на сайт или зарегистрируйтесь!!!

ActionScript 3.0. Урок 8. События

Перейти вниз

ActionScript 3.0. Урок 8. События

Сообщение автор Admin в Вс Фев 21, 2010 4:25 am

События показывают, когда что-нибудь случается. Щелчок по кнопке обозначает событие "click". При загрузке во флеш-плеер внешнего текстового файла возникает событие "complete", обозначающее, что содержимое этого текстового файла было полностью загружено в плеер.
Фактически, действия ActionScript полностью основаны на событиях. Используете ли вы обработчик событий для запуска кода по нажатию кнопки, либо записываете команды в кадрах временной шкалы (запускаются во время события флеш-плеера, которое показывает этот кадр), в любом случае вы пишите код, который реагирует на события.



События в прошлом


Для действий, не основанных на кадрах, большинство событий (в частности, события мыши и клавиатуры) изначально обрабатывались внутри блоков кода on([event]){}, помещенных в символы кнопок.

// Starting with Flash 2 and available for
// ActionScript 1 and 2, a press event
// placed on a selected button symbol
on(press) {
// play timeline in which this button exists
play();
}

События, использовавшиеся с on (некоторые появились после Flash 2), включали:

press
release
releaseOutside
rollout
rollover
dragOut
dragOver
keyPress ["whichKey"]

После появления Flash 5 в ActionScript появился новый вид обработчика событий, который мог добавляться не в символы кнопок, а в клипы. Это делалось с использованием блока кода onClipEvent([event]){}.

// Flash 5; ActionScript 1
// Placed on a selected movie clip symbol
onClipEvent(enterFrame) {
// move this movie clip 5 frames to
// the right every time the Flash player
// draws a frame based on the frame rate
_x += 5;
}

Во Flash 5 также появилась возможность загружать во флеш-плеер XML файл с новым (в то время) XML объектом. Чтобы программисту было известно, когда XML был загружен и проанализирован, XML объекту назначался обработчик события onLoad. Этот обработчик был в форме определения динамической функции, которое в любое время могло быть определено, удалено или изменено для XML объекта.

// Flash 5; ActionScript 1
// XML onLoad handler
var myXML = new XML();

// event handler called when
// XML has been loaded into myXML
myXML.onLoad = function(success){
// if XML has been loaded and parsed
// successfully, success is true
if (success){
trace(this); // trace XML
}
}

// load the XML into the XML object when
// loaded and parsed, onLoad will be called
myXML.load("xmlFile.xml");

Flash MX (6) значительно улучшил обработку событий. Было разрешено использование блоков кода не только на кнопках и клипах вместе взятых (в противоположность только кнопкам) но Flash MX также позволил создавать динамические обработчики событий для кнопок и клипов тем же способом, как определялся обработчик события onLoad для XML объектов во Flash 5. Несмотря на то, что обработчики on и onClipEvent были статическими и не могли изменяться во время прогона, использование этих основанных на функциях обработчиков означало, что событие могло быть удалено или переопределено в процессе проигрывания флеш фильма, что было особенно полезно для событий onEnterFrame, используемых для обработки анимации.

// Flash MX; ActionScript 1
// onEnterFrame event handler
// assigned for for a movie clip instance
myBall_mc.onEnterFrame = function(){
// move this movie clip to the right
// by 5 pixels every frame
this._x += 5;

// if the x position of this movie clip
// is greater than 200, delete the event handler
if (this._x > 200){
delete this.onEnterFrame;
}
}

Более важным является то, что Flash MX представил новое понятие для ActionScript, называемое листенером. Листенеры – это объекты с методами (и позднее могли включать только методы или функции), которые прислушиваются к событиям и имеют обработчик, вызываемый в качестве результата события. Ключевая идея в поддержку листенеров заключается в том, что к любому событию можно привязать более одного обработчика. С обычными обработчиками событий, такими как обработчик события onLoad для XML объекта, можно определить только одну функцию onLoad. Если вы определите ее снова, то прежняя функция onLoad будет переписана и вытеснена новым определением. Было очень трудно иметь более одного обработчика, привязанного к одному событию. Листенеры разрешили эту проблему.

С листенерами, вместо того, чтобы назначить обработчик события для объекта, получающего это событие, нужно было привязать обработчик события к другому объекту – любому другому объекту – а затем этот объект добавлялся в качестве листенера объекта, изначально получающего событие.

// Flash MX; ActionScript 1
// Mouse listeners; more than one
// object/handler reacting to the same event
var handler1 = new Object();
handler1.onMouseDown = function(){
trace("Handler 1");
}

var handler2 = new Object();
handler2.onMouseDown = function(){
trace("Handler 2");
}

Mouse.addListener(handler1);
Mouse.addListener(handler2);

// Clicking the mouse once results in the traces:
// Handler 1
// Handler 2

Так как и handler1, и handler2 в примере выше были листенерами объекта Mouse, их методы onMouseDown вызывались в качестве обработчиков события onMouseDown объекта Mouse. Если вы захотели, чтобы объект перестал быть листенером события, нужно использовать removeListener().

Привязка листенеров к методу addListener была отличной идеей, но ограничивалась несколькими объектами. Они включали:

Key
Mouse
Selection
Stage
TextField
FStyleFormat

С Flash MX 2004 (7) появился ActionScript 2. С ним пришел новый набор компонентов, которые использовали архитектуру, известную как V2 ("Версия 2"). Эта архитектура использовала новый вид формата листенера, который был похож на использование метода addListener, но вместо добавления объекта в качестве листенеров других объектов, он прислушивался к особым событиям от других объектов. Здесь использовался новый метод, называемый addEventListener, который был частью нового (V2) класса, называемого EventDispatcher. Метод addEventListener принимал как объект с обработчиками событий (или только функцию обработчика события), так и имя ожидаемого события. Добавление события предотвратило посылку ненужных событий объектам, не имеющим для них обработчиков событий (например, handler1 и handler2 в предыдущем примере получили события onMouseDown и onMouseUp от объекта Mouse, даже, несмотря на то, что у них не было обработчиков для них). Кроме того, событийный объект доходил до обработчиков событий, добавленных в качестве листенеров, при вызове события, предназначенного для предоставления информации о происходящем событии.

// Flash MX 2004; ActionScript 2
// button component event handlers

// Listener object with event handler
var handlerObject:Object = new Object();
handlerObject.click = function(event:Object):Void {
trace(event.type +": "+ this);
}

// Listener function
function handlerFunction(event:Object):Void {
trace(event.type +": "+ this);
}

// assign to be listeners of
// submit_button for the click event
submit_button.addEventListener("click", handlerObject);
submit_button.addEventListener("click", handlerFunction);

// Clicking the submit_button component:
// click: _level0.submit_button
// click: [object Object]

Поскольку эта форма обработки событий была встроена в архитектуру V2 компонента (класс EventDispatcher является частью этой архитектуры), на самом деле ее нельзя было увидеть где-нибудь еще в ActionScript за пределами компонентов. Основные языковые объекты, такие как Mouse и Key, по-прежнему использовали более старый метод addListener для обработки событий. Все это изменилось с приходом ActionScript 3.
avatar
Admin
Admin

Сообщения : 92
Очки : 280
Репутация : 36
Дата регистрации : 2010-02-20

Посмотреть профиль http://game-dll.mirbb.net

Вернуться к началу Перейти вниз

Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения