Добавление прослушивателей событий в массив, который выполняет функции перетаскивания в AS3 - PullRequest
0 голосов
/ 21 марта 2011

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

Моя цель с помощью этого кода - добавить прослушиватели событий в массив видеоклипов, которые будут перетаскивать их на сцену.

Вот код:

var itemBank:Array = new Array(d1_anim.drawer1.test01.movieClip_1, d1_anim.drawer1.test01.movieClip_2);

for(var i:int = 0; i < itemBank.length; i++) {
    itemBank[i].buttonMode = true;
    itemBank[i].addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    itemBank[i].addEventListener(MouseEvent.MOUSE_UP, dropOff);
    trace("pickUp added to " + itemBank[i]);
}

function pickUp(event:MouseEvent):void
{
    event.target.startDrag(true);
    trace("Draging " + event.target);
}

Прямо сейчас MC не перетаскивает и оператор трассировки говорит:

пикап добавлен в [объект MovieClip]

EDIT: Вот мой фла, я сдаюсь. Я не знаю, почему это не сработает. Пожалуйста помоги. [Загрузить здесь] (Редактировать: удалена ссылка для скачивания)

1 Ответ

2 голосов
/ 21 марта 2011

Ваш текущий код был протестирован и работает нормально. Ошибка должна быть где-то еще.

Если вы хотите использовать тестовый код, который вы использовали, вы можете скачать исходный код здесь: Drag & Drop Source File (Тот же код, что и у вас, это просто доказательство того, что он работает).


РЕДАКТИРОВАТЬ: Вот изменения, которые я внес в ваш код, чтобы он работал. Прочитайте комментарии для лучшего понимания. Я также изменил точку регистрации видеоклипа d1_anim.drawer1.test01.hair1 на центр вместо верхнего левого угла, это необходимо для его работы.

import flash.display.MovieClip;
import com.reintroducing.ui.SliderUI; // Always have imports at top. It's a good practice.

var itemBank:Array = new Array(d1_anim.drawer1.test01.hair1);

for(var i:int = 0; i < itemBank.length; i++) {
    itemBank[i].buttonMode = true;
    itemBank[i].mouseChildren = false;// Added this line. For explanation go to: http://ryanbosinger.com/blog/2008/actionscript-3-eventtarget-returns-children-of-movieclip/
    itemBank[i].addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    itemBank[i].addEventListener(MouseEvent.MOUSE_UP, dropOff);
    trace("pickUp added to " + itemBank[i]);
}

function pickUp(e:MouseEvent):void
{
    e.currentTarget.startDrag(true);
    trace("Draging " + e.currentTarget);
}
function dropOff(e:MouseEvent):void
{
    // --- Change 'this' to 'e.currentTarget' --- \\
    e.currentTarget.stopDrag();
    e.currentTarget.x = mouseX;
    e.currentTarget.y = mouseY;
    e.currentTarget.width = 200;
    // --- Putting the target in a temporary variable made an error dissapear. --- \\
    // --- I don't really know why and i don't really care either --- \\
    var tempMC = e.currentTarget;
    this.stage.addChild(tempMC);
    d1_anim.visible = false;
}

А вот и ссылка на рабочий .fla

...