2011-03-13 4 views
1

저는 flash, actionscript, class/method/static/instance 패러다임을 처음 접했습니다. 내가 사용하는 클래스가 하나 있는데, 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]

다음은 응용 프로그램이 실행되고의 스크린 샷입니다 (미안 해요 '는 나오지 않았어 GIF 파일을 만들면 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

+1

'text.selectable = false;'와'text.mouseEnabled = false', 가능하면'sprite.mouseChildren = false'가 필요합니다. –

+0

@MajorApus 예, 래스터화할 수 있습니다. 예를 들어 답변을 업데이트했습니다. –

관련 문제