У меня есть класс AS3, который расширяет movieClip с динамическим изображением, как сделать это изображение перетаскиваемым?
Мне нужно сделать элемент перетаскиваемым (перетаскиваемым?) Извините, если моя терминология неверна!
У меня есть класс, где я буду хранить переменные и делать вычисления:
package Classes
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
public class PrintItem extends MovieClip
{
public var imageLoader:Loader;
public function PrintItem()
{
}
public function loadImage(url:String):void
{
imageLoader = new Loader();
imageLoader.load(new URLRequest(url));
}
}
}
Я создаю новый экземпляр класса, передаю ему URL в loadImage и добавляю его на холст следующим образом:
var myItem:PrintItem = new PrintItem();
myItem.loadImage("pic.jpg");
this.addChild(myItem.imageLoader);
myItem.imageLoader.x = 50;
myItem.imageLoader.y = 50;
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
myItem.imageLoader.addEventListener(MouseEvent.MOUSE_UP, dropIt);
Но там я застрял. Мне нужно сделать этот элемент перетаскиваемым и написать функции pickUp и dropIt. event.target.startDrag(ложь); не работает (загрузчик не перетаскивается) и event.target.parent.startDrag(false); не работает, так как вся сцена становится перетаскиваемой! ПОМОГИТЕ! Это потому, что на сцену добавлен только Loader?
1 ответ
Хорошо. Я знаю, что прошло всего несколько минут, но я нашел ответ. Записать это здесь прояснилось в моей голове. Вот что сработало для меня, если это поможет кому-то еще:
Во-первых, я добавил образ Loader в качестве ребенка в класс следующим образом:
public function loadImage(url:String):void
{
imageLoader = new Loader();
imageLoader.load(new URLRequest(url));
this.addChild(imageLoader); // IMPORTANT!
this.mouseChildren = false;
this.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
this.addEventListener(MouseEvent.MOUSE_UP, dropIt);
}
И тогда мне нужно было только добавить класс на сцену, а не загрузчик:
this.addChild(myItem);
Вернувшись в класс, я добавил это:
public function pickUp(event:MouseEvent):void
{
trace("Pickup");
this.startDrag(false);
}
public function dropIt(event:MouseEvent):void
{
this.stopDrag();
trace("X = " + event.target.x + " Y = " + event.target.y); // Just to help me
}
И вуаля! Это сработало!