Как загрузить внешнее изображение на объект перетаскивания с помощью AS3? - PullRequest
0 голосов
/ 28 февраля 2011

НОВОЕ СООБЩЕНИЕ - РЕШЕНИЕ, КОТОРОЕ Я ЗАКОНЧИЛ ПРИМЕНЕНИЕ

Это то, что я использовал для загрузки внешнего изображения в мувиклип и перетаскивания.Часть обратной связи во многом совпадает со старым кодом.

var holdermc_Arr:Array = new Array(4);
for(var i:uint = 0; i < holdermc_Arr.length; i++)
{
    holdermc_Arr[i] = this["panel" + (i+1) + "_mc"];

    var myLoader:Loader = new Loader();
    var fileRequest:URLRequest = new URLRequest("images/" + (i+1) + ".jpg");
    myLoader.load(fileRequest);

    holdermc_Arr[i].addChild(myLoader);

    holdermc_Arr[i].addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    holdermc_Arr[i].addEventListener(MouseEvent.MOUSE_UP, dropIt);
    holdermc_Arr[i].buttonMode = true;
}

var startX:Number;
var startY:Number;
var counter:Number = 0;

function pickUp(event:MouseEvent):void {
startX = event.currentTarget.x;
startY = event.currentTarget.y;

setChildIndex(MovieClip(event.currentTarget),numChildren-1);
event.currentTarget.startDrag();
reply_txt.text = "";

}

СТАРЫЕ СООБЩЕНИЯ BELLOW

Это моя последняя попытка с текущей ошибкой, которую я получаю.

Я действительно хотел бы поработать с кодом моей предыдущей попытки, потому что мне проще добавить несколько перетаскиваемых фрагментов фильмов.

Но какой бы ни был код, основная проблема заключается в том, чтоЯ не настраиваю свойство правильно для "Загрузчика".

Сообщите, нужна ли ссылка на пример.

Ошибка заключается в следующем:

ReferenceError: Ошибка # 1069: свойство dropTarget не найдено вflash.display.Loader и нет значения по умолчанию.at cs5test_fla :: MainTimeline / ReleaseToDrop ()

Код следующий

var myLoader:Loader = new Loader(); 
panel1_mc.addChild(myLoader); 
var url:URLRequest = new URLRequest("uploadedImages/photo_1.jpeg"); 
myLoader.load(url);

var startX:Number;
var startY:Number;
var counter:Number = 0;

panel1_mc.addEventListener(MouseEvent.MOUSE_DOWN, ClickToDrag);

function ClickToDrag(event:MouseEvent):void
{
panel1_mc.startDrag();
startX = event.target.x;
startY = event.target.y;
    reply_txt.text = "";
event.target.parent.addChild(event.target);
}

stage.addEventListener(MouseEvent.MOUSE_UP, ReleaseToDrop);

function ReleaseToDrop(event:MouseEvent):void
{
panel1_mc.stopDrag();
var myTargetName:String = "target" + event.target.name;
var myTarget:DisplayObject = getChildByName(myTargetName);

if (event.target.dropTarget != null && event.target.dropTarget.parent == myTarget){

    reply_txt.text = "Good Job!";
    event.target.x = myTarget.x;
    event.target.y = myTarget.y;
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN, ClickToDrag);
    event.target.removeEventListener(MouseEvent.MOUSE_UP, ReleaseToDrop);
    event.target.buttonMode = false;
    counter++;
} else {
    reply_txt.text = "Try Again!";
    event.target.x = startX;
    event.target.y = startY;
}
if(counter == 1){
    reply_txt.text = "Congrats, you're finished!";
}
}

СТАРЫЕ СООБЩЕНИЯ НИЖЕ

Я все еще борюсь.

Я новичок во всем этом, поэтому я действительно стараюсь изо всех сил, чтобы понять это.

Код ActionScript, с которым я пытаюсь работать, находится полностью внизу.

Я был бы очень признателен, если бы кто-нибудь попытался взглянуть на этот код и сказать мне, как я могу загрузить внешние изображения в каждый перетаскиваемый фрагмент ролика, не получив следующую ошибку.

ReferenceError: Ошибка # 1069: свойство startDrag не найдено на flash.display.Loader и значение по умолчанию отсутствует.at dragdropDilema_fla :: MainTimeline / pickUp () ReferenceError: Ошибка # 1069: свойство stopDrag не найдено в flash.display.Loader и значение по умолчанию отсутствует.at dragdropDilema_fla :: MainTimeline / dropIt ()

Я пытался использовать простой загрузчик var, но для того, что я вижу в ошибке, я должен настроить свойство startDrag для работы с загруженным изображениема не с перетаскиваемыми клипами, которые сейчас есть на месте ??

Я подумал, что было бы просто, если бы я использовал следующее для каждого:

var myLoader:Loader = new Loader(); 
imageHolder.addChild(myLoader); 
var url:URLRequest = new URLRequest("uploadedImages/photo_1.jpeg"); 
myLoader.load(url);

, а затем сделал бы что-то вроде:

square_mc.imageHolder.addChild(myLoader);

но когда яв любом случае, когда я нажимаю на изображение, я получаю сообщение об ошибке.

Вот весь код: он должен рассчитывать, когда объект достигает цели, и выдает сообщение на всем протяжении и в конце.

panel1_mc.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
panel1_mc.addEventListener(MouseEvent.MOUSE_UP, dropIt);

panel1_mc.buttonMode = true;


var startX:Number;
var startY:Number;
var counter:Number = 0;

function pickUp(event:MouseEvent):void {
startX = event.target.x;
startY = event.target.y;
event.target.startDrag(true);
reply_txt.text = "";
event.target.parent.addChild(event.target);
}

function dropIt(event:MouseEvent):void {
event.target.stopDrag();
var myTargetName:String = "target" + event.target.name;
var myTarget:DisplayObject = getChildByName(myTargetName);
if (event.target.dropTarget != null && event.target.dropTarget.parent == myTarget){
    reply_txt.text = "Good Job!";
    event.target.x = myTarget.x;
    event.target.y = myTarget.y;
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    event.target.removeEventListener(MouseEvent.MOUSE_UP, dropIt);
    event.target.buttonMode = false;
    counter++;
} else {
    reply_txt.text = "Try Again!";
    event.target.x = startX;
    event.target.y = startY;
}
if(counter == 1){
    reply_txt.text = "Congrats, you're finished!";
}
}

Спасибо.

1 Ответ

1 голос
/ 28 февраля 2011
import flash.display.DisplayObjectContainer;
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;  
import flash.events.MouseEvent;
import flash.net.URLRequest;

var _dragMc:MovieClip = new MovieClip();
addChild(_dragMc);

loadImage("image.jpg")

function loadImage(path:String):void
{
    var _loader:Loader = new Loader();
    var _loaderToLoad:URLRequest = new URLRequest(path);
    _loader.load(_loaderToLoad);
    _loader.contentLoaderInfo.addEventListener(Event.COMPLETE, imageLoaded, false, 0, true);
}

function imageLoaded(evt:Event):void
{
   addLoader(evt.currentTarget.loader, _dragMc);
}

function addLoader(loader:Loader, container:DisplayObjectContainer):void
{
    container.addChild(loader);
    addListeners();
}

function addListeners():void
{
    _dragMc.addEventListener(MouseEvent.MOUSE_DOWN, setDrag, false, 0, true);
}

function setDrag(evt:MouseEvent):void
{
    _dragMc.addEventListener(MouseEvent.MOUSE_MOVE, doDrag, false, 0, true);
    _dragMc.removeEventListener(MouseEvent.MOUSE_DOWN, setDrag);
}

function doDrag(evt:MouseEvent):void
{
    _dragMc.startDrag(false, null);
    stage.addEventListener(MouseEvent.MOUSE_UP, endDrag, false, 0, true);
    _dragMc.removeEventListener(MouseEvent.MOUSE_MOVE, doDrag);
}

function endDrag(evt:MouseEvent):void
{
    _dragMc.stopDrag();
    _dragMc.addEventListener(MouseEvent.MOUSE_DOWN, setDrag, false, 0, true);
    stage.removeEventListener(MouseEvent.MOUSE_UP, endDrag);
}

Загружает изображение в MovieClip с именем _dragMc.Остальное от вас зависит.Я также добавил быстрый код, который позволит вам перетаскивать _dragMc вокруг.

...