2011-03-13 22 views
1

我是flash,actionscript和類/方法/靜態/實例範例的新手。我有一個我使用的類,它加載一個PNG文件並將其添加到舞臺上,然後我可以用鼠標操作它。我想要做的是在png文件的頂部添加一些文本。當用戶點擊並拖動png文件時,我希望文本能夠堅持下去,基本上可以將它作爲png的一部分,覆蓋它,合併它們,將它們分組,等等。如何將文字疊加到動畫片段對象上?

這是我用來加載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

我的答案與Nathan Ostgard基本相同,但我的答案有如下完成的類(我重寫了很多類,以遵循常見的編碼約定以及即興荷蘭國際集團整體可讀性):

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]

以下是正在運行的應用的截圖(對不起,我不能」你可以看到ElementIcon對象被拖動,但我向你保證你可以拖動它):

1

您應該創建一個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); 
} 
+0

這讓我比以前更加深入。我現在的問題是,我不能再拖拽(以前)的影片剪輯(現在)的精靈。 ReferenceError:錯誤#1069:在flash.text.TextField上找不到屬性stopDrag,並且沒有默認值。 \t at alchemy_v_0_fla :: MainTimeline/dropIt() 當我嘗試點擊精靈時,我得到一個文本選擇光標,有沒有辦法「光柵化」它,所以它不像文本行爲? – Miebster 2011-03-13 23:58:48

+1

你需要'text.selectable = false;'和'text.mouseEnabled = false',可能'sprite.mouseChildren = false' – 2011-03-14 00:14:43

+0

@MajorApus是的,你可以柵格化它。我用一個例子更新了答案。 – 2011-03-14 00:18:07

相關問題