0

我正在尝试创建一个简单的拖放 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);
        }

    }
4

3 回答 3

2

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

于 2009-08-24T02:47:10.780 回答
0

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

var newOrnament = event.target as OrnamentBase
if (newOrnament != null)
{
    // your code
}
于 2009-08-24T01:00:16.393 回答
0

为了搭载 Branden Hall 所说的,代码可能看起来像这样:

var ClassReference:Class = getDefinitionByName(getQualifiedClassName(e.target)) as Class;
var instance:DisplayObject = new ClassReference();
addChild(instance);
于 2009-08-24T05:22:24.097 回答