Перетащите и клонируйте MovieClip в AS3 - PullRequest
0 голосов
/ 14 сентября 2011

У меня есть панель инструментов с несколькими машинами слева от окна, и я хочу щелкнуть по одному элементу и перетащить его на доску, создав его клон, но я не могу этого сделать.

Мое приложение выглядит следующим образом:

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 Ответ

1 голос
/ 14 сентября 2011

А что не работает? Главная проблема, которую я вижу, в том, что вы создаете новую машину, но не добавляете ее в список отображения. В вашей функции клонирования вам нужно что-то вроде

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