在AS3中拖动并克隆MovieClip

时间:2011-09-14 17:11:36

标签: actionscript-3 flash-cs5

我在窗口左侧有一个带有一些汽车的工具栏,我想点击一个元素并将其拖到电路板上创建它的克隆,但我不能这样做。

我的应用看起来像这样:

enter image description here

左边的汽车是我想要拖的。

我的源代码是:

public class Car extends MovieClip
    {

        // imports...

        var newcar:Car;

        public function Car(){
            addListeners();
        }

        private function addListeners():void{
            this.addEventListener(MouseEvent.MOUSE_DOWN,clone);
        }

        private function clone(e:MouseEvent):void{
            // Clone the object
            newcar = new dibujo();
            newcar.graphics.copyFrom(this.graphics);
            newcar.x = this.x;
            this.parent.addChild(newcar);

                    // Asign new events to recently created mc
            newcar.addEventListener(MouseEvent.MOUSE_OVER,dragCar);
            newcar.addEventListener(MouseEvent.MOUSE_UP,dropCar);
        }

        private function dragCar(e:MouseEvent):void{
            this.startDrag();
        }

        private function dropCar(e:MouseEvent):void{
            this.stopDrag();
        }

    }

红色汽车和卡车使用我自己的基本类“汽车”。

提前致谢!我希望有人可以帮助我。

1 个答案:

答案 0 :(得分:1)

什么不起作用? 我看到的主要问题是,您创建新车,但不将其添加到显示列表中。在你的克隆功能中,你需要像

这样的东西
this.parent.addChild(newcar);

编辑: 正如我在评论中所说,问题是,属性图形是只读的,所以你不能改变它。 如果你的汽车是扩展你的汽车的类(如果不是,你可以很容易地制造它们),你可以使用这个: 取代

newcar = new dibujo(); //I think you menat new Car() here

newcar = new e.target.constructor;

这应该最终使它工作。 然后你会遇到拖动问题 - 它永远不会停止。但解决方案很简单,将此行添加到stopDrag函数中:

e.target.removeEventListener(MouseEvent.MOUSE_MOVE, dragCar);