2011-03-13 87 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

相关问题