使用actionscript 3.0来检测单击的符号类

时间:2009-08-24 00:00:32

标签: flash actionscript-3 flash-cs4

我正在尝试创建一个简单的拖放Flash程序,用户可以将圣诞饰品拖到树上。我没有能够拖动装饰一次,而是想要一个函数,这样每次点击一个装饰时,它都会将相同类的新装饰添加到点击装饰的舞台上。目前我有这个工作,但有一个问题。它不是动态的。查看“拖动”功能,我选择了“Symbol31”类作为添加的默认装饰。相反,我希望ActionScript读取被点击的装饰的类并添加该类,而不是每次都添加“Symbol31”。

请参阅下面的代码。

由于

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

    }

3 个答案:

答案 0 :(得分:2)

最灵活的解决方案是首先通过将event.target传递给getQualifiedClassName(flash.utils的一部分)然后将其传递到getDefinitionByName(也在flash.utils中)将该字符串转换为a来获取类的名称。参考实际的课程。创建该类的新实例,然后离开。

答案 1 :(得分:0)

假设您的所有饰品都有基类,您可以执行以下操作吗?

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

答案 2 :(得分:0)

捎带Branden Hall所说的代码可能看起来像这样:

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