Код в кадрах писать можно, но нежелательно, если вы хотите делать что-нибудь более-менее серъёзное.
Классы подключать очень просто. Попробуйте:
Код AS3:
package {
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.text.TextField;
import flash.display.MovieClip;
/**
* Основной класс документа (Document Class).
* Является потомком MovieClip. Это значит, что любой объект этого класса будет иметь
* те же свойства и методы, что и MovieClip, плюс те, которые определите вы. Также это
* значит, что с любым объектом этого класса можно обращаться, как с объектом MovieClip.
*/
public class MainClass extends MovieClip {
/**
* Закрытое свойство. Доступ к нему будет возможен только изнутри этого класса.
*/
private var did_field:TextField;
/**
* Конструктор класса. Вызывается при создании экземпляра класса (в нашем случае –
* при запуске флешки).
*/
public function MainClass() {
//создаём текстовое поле
did_field = new TextField();
did_field.defaultTextFormat = new TextFormat('_sans', 14);
did_field.selectable = false;
did_field.autoSize = TextFieldAutoSize.LEFT;
did_field.x = did_field.y = 20;
//добавляем его в контейнер (аналогично помещению на рабочую область в Flash IDE)
addChild(did_field);
//пользуемся методом-сеттером для установки текста поля.
fieldText = 'Текст поля did_field';
}
/**
* Метод-геттер. Позволяет получить текст поля.
* Ключевое слово public означает, что доступ к свойству fieldText для чтения
* можно будет получить извне.
*/
public function get fieldText():String{
return did_field.text;
}
/**
* Метод-геттер. Позволяет установить текст поля.
* Ключевое слово public означает, что доступ к свойству fieldText для записи
* можно будет получить извне.
*/
public function set fieldText(value:String):void {
did_field.text = value;
}
}
}
Этот текст задаёт Document Class – основной класс документа. Его нужно сохранить в файл "MainClass.as". Далее создайте в той же папке .fla - файл, и пропишите в поле "Class" имя основного класса – MainClass. После запуска флешки будет создано текстовое поле, и ему будет установлен текст.
К экземпляру класса обращаться можно, как к любой другой переменной (точнее, любая переменная во флеше на самом деле хранит ссылку на экземпляр какого-то класса, будь то String, MovieClip или TextField). Однако важно помнить, что для доступа к членам класса (свойствам и методам) переменная, хранящая ссылку на экземпляр, должна быть нужного типа.
Например, определим класс ColorRect:
Код AS3:
package {
import flash.display.Sprite;
/**
* Закрашенный прямоугольник.
*/
public class ColorRect extends Sprite {
/**
* Конструктор.
*/
public function ColorRect() {
super();
}
/**
* Закрашивает заданным цветом прямоугольник 50x50.
*
* @param newColor:uint Цвет заполнения.
*/
public function fillBy(newColor:uint = 0xA2A2A2):void{
with(graphics){
clear();
lineStyle(0, newColor);
beginFill(newColor);
drawRect(0, 0, 50, 50);
endFill();
}
}
}
}
Данный класс имеет публичный метод fillRect(). Сохраним этот класс в файле ColorRect.as в той же папке, что и MainClass.as. Изменим MainClass.as следующим образом:
Код AS3:
package {
import flash.display.MovieClip;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
/**
* Основной класс документа (Document Class).
*/
public class MainClass extends MovieClip {
/**
* Закрытое свойство. Доступ к нему будет возможен только из этого класса.
*/
private var did_field:TextField;
/**
* Конструктор класса. Вызывается при создании экземпляра класса (в нашем случае –
* при запуске флешки).
*/
public function MainClass() {
//создаём текстовое поле
did_field = new TextField();
did_field.defaultTextFormat = new TextFormat('_sans', 14);
did_field.selectable = false;
did_field.autoSize = TextFieldAutoSize.LEFT;
did_field.x = did_field.y = 20;
//добавляем его в контейнер (аналогично помещению на рабочую область в Flash IDE)
addChild(did_field);
//пользуемся методом-сеттером для установки текста поля.
fieldText = 'Текст поля did_field';
var colorRect:ColorRect;
//var colorRect:Sprite;
//создаём экземпляр ColorRect
colorRect = new ColorRect();
colorRect.x = did_field.x - 5;
colorRect.y = did_field.y - 5;
colorRect.width = did_field.width + 10;
colorRect.height = did_field.height + 10;
//добавляем его в контейнер.
addChildAt(colorRect, 0);
//вызываем метод класса ColorRect.
colorRect.fillBy(0x9EACE0);
}
/**
* Метод-геттер. Позволяет получить текст поля.
*/
public function get fieldText():String{
return did_field.text;
}
/**
* Метод-геттер. Позволяет установить текст поля.
*/
public function set fieldText(value:String):void {
did_field.text = value;
}
}
}
В конструкторе мы объявляем переменную типа ColorRect и присваиваем ей новый экземпляр класса ColorRect. Далее задаём его положение и добавляем в контейнер, а затем вызываем публичный метод, определённый в классе ColorRect.
Если же мы теперь вместо var colorRect:ColorRect напишем var colorRect:Sprite, то возникнет ошибка в строчке colorRect.fillBy(0x7285D1). Почему именно там? До этого всё будет нормально, так как ColorRect является потомком Sprite, и мы можем присвоить его переменной типа Sprite. Также можно пользоваться свойствами x, y, width и height, которые класс Sprite унаследовал от DisplayObject. А вот метод fillBy() в классе Sprite не определён, мы ведь его определили только в ColorRect. Поэтому, если объявить переменную как Sprite, то этот метод вызвать не удастся, несмотря на то, что он публичный. Однако можно в этом случае привести тип переменной: (colorRect as ColorRect).fillBy(0x7285D1), и всё пройдёт удачно, так как переменная colorRect на самом деле хранит экземпляр класса ColorRect.
Именно поэтому у вас и возникала ошибка с текстовым полем. Флеш при компиляции создаст класс, являющийся наследником DisplayObject, в котором будет свойство did_field типа TextField, так как вы добавили текстовое поле с этим именем на сцену. Экземпляром этого класса и будет являться объект root. Но к объекту в памяти мы можем обратиться только через переменную. А переменная (свойство) DisplayObject.root имеет тип DisplayObject, в котором свойство did_field не определено. Отсюда ошибка.