2014-02-16 39 views
1

我正在嘗試爲孩子們創建一個遊戲,在那裏他們可以將字母拖到舞臺上以製作單詞。AS3對象框和重置按鈕

我想添加一個'垃圾桶',用戶可以拖動他們不再需要處理的信件。我創建了影片剪輯,但我完全不確定如何使用AS3使其功能。

我還想添加一個重置按鈕,以便舞臺恢復到原來的狀態。再次,我已經畫出了它,並添加了我知道的小小as3(做一個按鈕),但如果任何人都可以協助如何真正做到這一點,我將不勝感激。

這些文件在這裏:SWF | FLA和遊戲的代碼如下:

import flash.display.MovieClip; 

for (var i=1; i<27; i++) 
{ 
    this["object" + i].addEventListener(MouseEvent.MOUSE_DOWN, onStart); 
    this["object" + i].addEventListener(MouseEvent.MOUSE_UP, onStop); 
}  

var sx = 0,sy = 0; 

function onStart(e) 
{ 
    sx = e.currentTarget.x; 
    sy = e.currentTarget.y; 
    e.currentTarget.startDrag(); 
} 

function onStop(e) 
{ 
    if (e.target.dropTarget != null && 
     e.target.dropTarget.parent == dest && 
     e.currentTarget.name != "copy") 
    { 
     var objectClass:Class = 
     getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class; 

     var copy:MovieClip = new objectClass(); 
     copy.name = "copy"; 
     this.addChild(copy); 
     copy.x = e.currentTarget.x; 
     copy.y = e.currentTarget.y; 

     e.currentTarget.x = sx; 
     e.currentTarget.y = sy; 

     copy.addEventListener(MouseEvent.MOUSE_DOWN, onStart); 
     copy.addEventListener(MouseEvent.MOUSE_UP, onStop); 
    }  
    e.currentTarget.stopDrag(); 
} 


resetButton.addEventListener(MouseEvent.CLICK, reset); 
resetButton.buttonMode = true; 

function reset(event:MouseEvent):void 
{ 

//Not sure what AS3 to add here to reset to original state 

} 

回答

1

我已經給了你這裏的解決方案Flash AS3 Clone, Drag and Drop

在這裏,我就如何將一個箱子內的對象,並刪除他們詳細的解決方案。

爲了將複製的對象放入容器中,在拖動停止後,檢查與容器對象的衝突。更多信息看,

copiedObject.hitTestObject(binObject)

對於例如

首先創建垃圾能在舞臺上MovieClip,並給它一個實例名稱「垃圾桶」,添加以下行到您的onStop()(以下e.currentTarget.stopDrag();)功能,像這樣:

UPDATE:

var copiedObjsArr:Array = [];  

function onStop(e) 
{ 
    if (e.target.dropTarget != null && 
    e.target.dropTarget.parent == dest && 
    e.currentTarget.name != "copy") 
    { 
     //Code here remains same 
     //....... 

     //Keep collecting copied letters for further access in `reset()` function 
     copiedObjsArr.push(copy); 
    } 
    else if(e.currentTarget.name == "copy") //this is 'else if' (newly added) 
    { 
     var tarObject:MovieClip = e.currentTarget; 

     // These detects collision of dragged object with the trashCan 
     if(tarObject.hitTestObject(trashCan)) { 

      //These removes dragged object from the display list (not from the memory) 
      removeChild(tarObject); 

      tarObject = null; //to garbage 
     } 
    } 

    e.currentTarget.stopDrag(); 
} 

而你的reset()變成這樣:

function reset(event:MouseEvent):void 
{ 

    if(copiedObjsArr.length > 0) 
    { 
     //Traverse through all copied letters 
     for(var i:int = 0; i<copiedObjsArr.length; i++) 
     { 
      var objToRemove:MovieClip = copiedObjsArr[i]; 

      removeChild(objToRemove); 

      objToRemove = null; 
     } 

     //Finally empty the array 
     copiedObjsArr = []; 
    } 
} 
+0

再次感謝Rajneesh。我不明白如何編寫動作腳本,這就是爲什麼我發佈了一個新問題(我試圖實現你上次給我的代碼但不成功)。 我已經剪切並粘貼了您提供的代碼並且它可以正常工作,但是控制檯向我發送了消息''ReferenceError:Error#1074:非法寫入flash.events.MouseEvent上的只讀屬性currentTarget在wordwork_fla :: MainTimeline/onStop()「。」你知道我做錯了嗎? – James

+0

我已更新最後一行。 –

+0

現在它根本不起作用 - 我得到錯誤:「場景1,圖層'操作',第1幀,第47行1105:賦值目標必須是參考值。」# – James