Мой ответ по сути такой же, как у Натана Остгарда, но мой ответ имеет законченный класс следующим образом (я переписал большую часть вашего класса, чтобы придерживаться общих правил кодирования, а также улучшить общую читабельность):
package
{
import flash.display.Bitmap;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.IOErrorEvent;
import flash.events.Event;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
public class ElementIcon extends MovieClip
{
private var _bitmap:Bitmap;
private var _name:String;
private var _textField:TextField;
private const DEFAULT_URL:String = "images/default.png";
public function ElementIcon(name:String)
{
_name = name;
init();
}// end function
private function init():void
{
_textField = new TextField();
loadImage();
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
}// end function
private function loadImage():void
{
var url:String = "images/" + _name + ".png";
var loader:Loader = new Loader();
loader.load(new URLRequest(url));
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onLoaderIOError);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
}// end function
private function onLoaderIOError(e:IOErrorEvent):void
{
var loader:Loader = new Loader();
loader.load(new URLRequest(DEFAULT_URL));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);
}// end function
private function onLoaderComplete(e:Event):void
{
_bitmap = e.target.content as Bitmap;
build();
}// end function
private function build():void
{
addChild(_bitmap);
_textField.text = _name;
_textField.x = (this.width/2) - (_textField.textWidth/2)
_textField.y = 5;
_textField.selectable = false;
addChild(_textField);
}// end function
private function onMouseDown(e:MouseEvent):void
{
startDrag();
}// end function
private function onMouseUp(e:MouseEvent):void
{
stopDrag();
}// end function
}// end class
}// end package
Вы можете реализовать следующим образом:
var elementIcon:ElementIcon = new ElementIcon("Image1");
addChild(elementIcon);
[UDPDATE]
Ниже приведен скриншот запуска приложения (извините, я не смогсоздайте gif-файл, чтобы вы могли видеть перетаскиваемый объект ElementIcon
, но, уверяю вас, вы можете его перетащить):
![TextOnLoadedImage](https://i.stack.imgur.com/y2uVd.jpg)