2009-08-24 80 views
0

我想创建一个简单的拖放Flash程序,用户可以将圣诞饰品拖放到树上。我不需要拖动一次装饰物,而是需要一个功能,以便每次点击一个装饰物时,它将同一个类的新装饰物添加到装饰物被点击的舞台上。目前我有这个工作,但有一个问题。它不是动态的。查看“拖动”功能,我选择了“Symbol31”类作为默认添加的饰品。相反,我希望ActionScript读取点击的装饰类并添加该类,而不是每次都添加“Symbol31”。使用动作脚本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

最灵活的解决方案将是event.target突入的getQualifiedClassName(flash.utils的一部分),然后传递到这getDefinitionByName(也flash.utils)转向首先得到类的名称将该字符串转换为对实际类的引用。创建一个新的类,然后离开你。

+0

这是伟大的!谢谢 – 2009-08-24 04:23:23

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);