Как наложить текст на объект мувиклипа? - PullRequest
1 голос
/ 14 марта 2011

Я новичок во флэш-памяти, ActionScript и парадигме класса / метода / статики / экземпляра.У меня есть один класс, который я использую, он загружает файл png и добавляет его на сцену, затем я могу управлять им с помощью мыши.То, что я хочу сделать, это добавить текст поверх файла PNG.Когда пользователь щелкает и перетаскивает файл png, я хочу, чтобы текст придерживался его, в основном делал его частью png, накладывал его, объединял их, группировал их, что угодно.

Вот класс Iиспользую для загрузки png.

package {

import flash.display.MovieClip;
import flash.display.Loader;
import flash.events.*;
import flash.net.URLRequest;

public class element_icon extends MovieClip {
    public function element_icon(type) {
        var imageLoader:Loader = new Loader();
        var theURL:String = "images/" + type + ".png";
        var imageRequest = new URLRequest(theURL);
        imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
        imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
        imageLoader.load(imageRequest);



        function onIOError(e:IOErrorEvent):void{
            var theURL:String = "images/default.png";
            var imageRequest = new URLRequest(theURL);
            imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
            imageLoader.load(imageRequest);
        }

        function onComplete(evt:Event) {
            addChild(imageLoader.content);

        }
    }
}
}

Ответы [ 2 ]

2 голосов
/ 14 марта 2011

Мой ответ по сути такой же, как у Натана Остгарда, но мой ответ имеет законченный класс следующим образом (я переписал большую часть вашего класса, чтобы придерживаться общих правил кодирования, а также улучшить общую читабельность):

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

1 голос
/ 14 марта 2011

Вы должны создать Sprite и добавить к нему и текст, и растровое изображение:

function onComplete(evt:Event) {
  var text:TextField = new TextField;
  text.autoSize = TextFieldAutoSize.LEFT;
  text.text = 'Hello, world!';

  var sprite:Sprite = new Sprite;
  sprite.addChild(imageLoader.content);
  sprite.addChild(text);

  addChild(sprite);
}

Если вы хотите отобразить текст в растровом изображении, вы также можете сделать это:

function onComplete(evt:Event):void {
  var text:TextField = new TextField;
  text.autoSize = TextFieldAutoSize.LEFT;
  text.text = 'Hello, world!';

  var bitmap:Bitmap = imageLoader.content as Bitmap;
  bitmap.bitmapData.draw(text);
  addChild(bitmap);
}
...