1

ここに画像の説明を入力

こんにちは、私の目標を示すために別の画像を使用することにしました。ドラッグ アンド ドロップが成功したときに複数の XML ファイルをロードできるかどうかを知りたいですか? また、目標を達成できなかったときに空白の XML にリセットまたは切り替えることができるとしたら?

私のコードは他のコードと混在しています。基本的に、円がボタンである場合、毎回異なる XML が読み込まれます。2 つのコード セットを多かれ少なかれマージして、円/像がドラッグされたときに、" Circle one In Place Successfully」というメッセージが表示され、持っている xml ファイルも読み込まれます。私がそれを実装しようとしたとき、悲しいことに、全体的な結果は数え切れないほどのエラーであり、私は言うのが怖い.

ああ、これも明確にしたいのですが、これはドラッグ アンド ドロップに関する以前の質問からのオフセットではありません。これは、さまざまなアプローチを試して XML について一般的に学んでいるので、最終的にこれを次のように使用することになりました。ドラッグごとに異なる XML をロードできるかどうかをテストするための「スケルトン」。

import flash.net.URLLoader;
import flash.events.Event;

var circles:Array = [circle1_mc, circle2_mc, circle3_mc];

circle1_mc.myname = "xmlFile1";
circle2_mc.myname = "xmlFile2";
circle3_mc.myname = "xmlFile3";

var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML(); 

function LoadXML (evt:Event):void
{
    trace ("Load completed");
    xmlData = XML(xmlLoader.data);   
}

var bArray:Array = [circle1_mc, circle2_mc, circle3_mc];
for (var k:Number = 0; k<bArray.length; k++)
{
    bArray[k].buttonMode = true;
    bArray[k].addEventListener (MouseEvent.CLICK,changeXMLPath);
}
function changeXMLPath (evt:MouseEvent):void
{
    for (var i:Number = 0; i<bArray.length; i++)
    {
        if (evt.target.myname == bArray[i].myname)
        {         
            xmlLoader.load (new URLRequest(evt.target.myname+".xml"));
            xmlLoader.addEventListener (Event.COMPLETE,LoadXML);
        }
    }
}



for each(var circleMC:MovieClip in circles)
{
    circleMC.addEventListener(MouseEvent.MOUSE_DOWN, pickUp);
    circleMC.addEventListener(MouseEvent.MOUSE_UP, dropIt);
    circleMC.startX = circleMC.x;
    circleMC.startY = circleMC.y;
}

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

function dropIt(event:MouseEvent):void
{
    event.target.stopDrag();
    if(event.target.hitTestObject(target_mc)){
        event.target.buttonMode = false;
        event.target.x = target_mc.x;
        event.target.y = target_mc.y;


        for each(var circleMC:MovieClip in circles)
        {
            if(event.target != circleMC)
            {
                circleMC.x = circleMC.startX;
                circleMC.y = circleMC.startY;
            }
            if(event.target.name == "circle1_mc"){
                reply_txt.text = "Statue1 In Place Successfully";

            };
            if(event.target.name == "circle2_mc"){
                reply_txt.text = "Statue2 In Place Successfully";
            };
            if(event.target.name == "circle3_mc"){
                reply_txt.text = "Statue3 In Place Successfully";
            };
        }
    }
    else
    {
        event.target.x = event.target.startX;
        event.target.y = event.target.startY;
        event.target.buttonMode = true;
    }
}
4

1 に答える 1

1

次のようにメソッドと一緒にstartDrag()メソッドを使用する必要があります。stopDrag()hitTestObject()

  • ステージ上に「circle1」「circle2」「circle3」の3つの円を配置しました。
  • また、インスタンス名が「dropTarget1」、「dropTarget2」、「dropTarget3」の 3 つのシンボルをドロップ ターゲットとしてステージに配置しました。

次のコードをフラッシュ タイムラインに配置し、

var totCircles:int = 3;
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = new XML(); 

for (var k:Number = 1; k<=totCircles; k++)
{
   this["circle" + k].buttonMode = true;
   this["circle" + k].addEventListener(MouseEvent.MOUSE_DOWN, startDragging);
   this["circle" + k].addEventListener(MouseEvent.MOUSE_UP, stopDragging);
}

function startDragging(e:MouseEvent):void
{
     e.currentTarget.startDrag(false);
}

function stopDragging(e:MouseEvent):void
{
    // extract index from current target
    var currTarIndex = e.currentTarget.name.slice(6); 
    e.currentTarget.stopDrag();

    if(e.currentTarget.hitTestObject(this["dropTarget" + currTarIndex]))
    {
         loadXML("xmlFile"+ currTarIndex + ".xml");
         //You can also add position snap here
    }
 }

 function loadXML(url:String):void
 {
      xmlLoader.load (new URLRequest(url));
      xmlLoader.addEventListener (Event.COMPLETE,LoadXML);
 }

これがあなたを助けることを願っています。

于 2013-03-13T20:22:07.807 に答える