2013-03-13 24 views
1

enter image description hereAS3 - 通過拖放加載不同的XML文件?

你好,我決定使用其他圖片展示一下我的目標,我想知道是否有可能當一個成功的拖放已經取得了加載多個XML的文件?如果可以在脫離目標目標時重置或切換爲空白XML?

我的代碼已經與我的其他代碼混合在一起,基本上如果圓圈是按鈕,每次都會加載不同的XML,我想或多或少地合併兩組代碼,以便當圓/雕像拖過去,「Circle one Place in Success」將出現,並且我已經加載的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; 
    } 
} 

回答

1

您需要使用startDrag()stopDrag()方法連同hitTestObject()方法如下,

  • 我已經把三個圓在舞臺上的 「CIRCLE1」, 「CIRCLE2」 和 「CIRCLE3」。
  • 我還在舞臺上放置了三個符號作爲放置目標,實例名稱爲 「dropTarget1」,「dropTarget2」和「dropTarget3」。

放在Flash時間軸下面的代碼,

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

希望這會幫助你。