代码之家  ›  专栏  ›  技术社区  ›  Adrian Adkison

使用ActionScript 3.0检测单击的符号类

  •  0
  • Adrian Adkison  · 技术社区  · 15 年前

    我正在尝试创建一个简单的拖放Flash程序,用户可以在其中将圣诞节装饰物拖到树上。我不想拖动装饰一次,而是希望有一个功能,这样每次单击装饰时,它都会在单击装饰的舞台上添加一个相同级别的新装饰。目前我有这个工作,但有一个问题。它不是动态的。在“drag”函数中,我选择了类“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 回复  |  直到 15 年前
        1
  •  2
  •   Branden Hall    15 年前

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

        2
  •  0
  •   skalb    15 年前

    假设你的所有装饰品都有一个基类,你能做如下的事情吗?

    var newOrnament = event.target as OrnamentBase
    if (newOrnament != null)
    {
        // your code
    }
    
        3
  •  0
  •   ThunderChunky_SF    15 年前

    为了理解布兰登·霍尔所说的,代码看起来可能是这样的:

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