Использование символов из библиотеки
Некоторые программисты напрочь отвергают использование 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);
}
}
}
Что делать, если конструктору класса Figure нужно передать параметры? И вообще здесь Display object экземпляры классов Square и Circle. Почему они ввели необходимость базового класса при связывании?
1. Так как
Square
иCircle
являются потомками классаFigure
, то они наследуют все его методы. Следовательно, если есть необходимость передачи параметров, передавать их можно при создании экземпляровSquare
илиCircle
.2. По умолчанию базовым классом для связанных элементов библиотеки по понятным причинам является
flash.display.MovieClip
, но при необходимости есть возможность его переназначить (как в нашем случае)Скажите, пожалуйста, что здесь неправильно. Ошибка: 1203: No default constructor found in base class Figure.
Ошибка в том, что Вы попытались передать параметр конструктору класса. А у конструктора
MovieClip
нет параметров. Это и вызвало ошибку.Не могли бы вы выложить исходники этого примера, я что-то никак немогу разобраться.
Могу. Качайте здесь
Скажите пожалуйста, а как сделать так, что бы при добавлении круга и квадрата на сцену можно было указать их начальное положение по оси х и у? Самый простой вариант использовать:
а.х = 20;
а.у = 30;
Но если таких квадратов будет 20 то сложно будет для каждого писать. Как можно передать в конструктор класса Figure параметры, что бы при добавлении объектов можно было указать их положение? Заранее спасибо Вам! Очень надеюсь услышать ответ!
@Michael
в конструктор не передаются параметры