2009-08-24 2 views
0

사용자가 트리에 xmas 장식을 끌 수있는 간단한 드래그 앤 드롭 플래시 프로그램을 만들려고합니다. 장식을 한 번 드래그 할 수있는 대신, 장식을 클릭 할 때마다 장식이 클릭되는 무대에 같은 클래스의 새 장식을 추가 할 수있는 기능이 필요합니다. 현재이 작업이 있지만 한 가지 문제가 있습니다. 그것은 역동적이지 않습니다. "드래그"기능을 살펴보면 기본 장식으로 클래스 "Symbol31"을 선택했습니다. 대신 ActionScript에서 클릭 한 장식의 클래스를 읽고 매번 "Symbol31"이 아닌 해당 클래스를 추가하기를 원합니다.actionscript 3.0을 사용하여 클릭 한 기호의 클래스를 감지하십시오.

아래 코드를 참조하십시오.

감사는 다음과 같은 것을 할 수있는 당신이, 당신의 장신구에 대한 기본 클래스를 가정

public class DragDrop extends MovieClip 
{ 
    private var originalX:Number; 
    private var originalY:Number; 

    public function DragDrop() 
    { 
     originalX = this.x; 
     originalY = this.y; 
     this.addEventListener(MouseEvent.MOUSE_DOWN, drag); 
    } 

    private function drag(event:MouseEvent):void 
    { 
     if(event.target.x>Number(600)) 
     { 
      var newOrnament:Symbol31 = new Symbol31(); 
      newOrnament.x=originalX; 
      newOrnament.y=originalY; 
      this.parent.addChild(newOrnament); 
      newOrnament.startDrag(); 
      newOrnament.addEventListener(MouseEvent.MOUSE_UP, drop); 
     }else{ 
      this.startDrag(); 
      this.parent.addChild(this); 
      this.addEventListener(MouseEvent.MOUSE_UP, drop); 
     } 

    } 

답변

2

가장 유연한 솔루션 먼저 설정하는 (또한 flash.utils의에서)의 getDefinitionByName로 그 전달 다음에는 getQualifiedClassName에 event.target (flash.utils의 일부를) 통과에 의해 클래스의 이름을 얻을 것이다 이 문자열을 실제 클래스에 대한 참조로 변환합니다. 그 클래스의 새로운 인스턴스를 만들어라.

+0

이 위대하다! 고맙습니다 –

0

?

var newOrnament = event.target as OrnamentBase 
if (newOrnament != null) 
{ 
    // your code 
} 
0

는 브랜든 홀이 코드는 다음과 같이 보일 수있는 말에 피기 백하려면

var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class; 
var instance:DisplayObject = new ClassReference(); 
addChild(instance); 
관련 문제