Некоторые программисты напрочь отвергают использование Flash IDE за неудобный редактор кода, который на самом деле не очень подходит для написания больших приложений с использованием элементов пользовательского интерфейса (GUI).
Тем не менее рано или поздно каждому программисту приходится работать с SWF файлами ( с так называемым "дизайном", который так не любят программисты 🙂 ), которые были созданы именно во Flash CS3 IDE. И очень часто возникают трудности в работе с такими флэшками из-за их несовместимости с "правильным" кодом.
Итак. Постановка задачи: Нужно создать два символа фигур (квадрат и круг) в библиотеке и назначить им одинаковую модель поведения. То есть любой из этих символов, добавленный на сцену, должен при нажатии на них кнопкой мышки переместиться на передний план и "прилипнуть" к курсору. При отпускании мышки - "отлипнуть" от курсора. Короче говоря, когда посмотрите результат - поймете что я имел в виду 😀
Первое, что мы сделаем, это создадим класс, описывающий поведение наших фигур.
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
class Figure extends MovieClip {
public function Figure() {
addEventListener(MouseEvent.MOUSE_DOWN, StartDrag);
addEventListener(MouseEvent.MOUSE_UP, StopDrag);
}
private function StartDrag(e:Event) {
var trgt = e.target
var mc_parent = trgt.parent
mc_parent.removeChild(trgt)
mc_parent.addChild(trgt)
trgt.startDrag();
}
private function StopDrag(e:Event) {
e.target.stopDrag();
}
}
}
Разберемся по порядку
импортируем необходимые библиотеки:
package {
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.MouseEvent;
Объявляем класс и инициирующий метод. При создании экземпляра класса к нему добавляются два слушателя событий, реагирующих на нажатие и отпускание левой кнопки мыши:
class Figure extends MovieClip {
public function Figure() {
addEventListener(MouseEvent.MOUSE_DOWN, StartDrag);
addEventListener(MouseEvent.MOUSE_UP, StopDrag);
}
При нажатии левой кнопки мыши вызывается функция StartDrag (не путать с методом startDrag) в которой мувик удаляется со сцены, потом снова добавляется на нее (таким образом перемещается наверх) и включается startDrag()
При отпускании левой кнопки мыши вызывается функция StopDrag
private function StartDrag(e:Event) {
var trgt = e.target
var mc_parent = trgt.parent
mc_parent.removeChild(trgt)
mc_parent.addChild(trgt)
trgt.startDrag();
}
private function StopDrag(e:Event) {
e.target.stopDrag();
}
}
}
Теперь нужно создать два символа и присвоить им класс Figure в роли базового. Для этого рисуем на сцене круг, и превращаем его в символ нажатием клавиши [F8]

Теперь подобным же образом создаем квадрат.
Следующий шаг - создаем базовый класс мувика в котором берем символы из библиотеки и помещаем их на сцену:
package {
import flash.display.Sprite;
public class Main extends Sprite {
public function Main() {
var a:Square = new Square();
var b:Circle = new Circle();
addChild(a);
addChild(b);
}
}
}