2014-02-13 112 views
0

我是一名老師,在你們中的一些人的幫助下,我設法爲孩子們創建了非常基本的文字遊戲,他們可以從字母創建單詞。 SWF | FLAFlash AS3克隆,拖放和放下

但是,我已經無法繼續拖放字母,一旦它們從原件克隆到舞臺的一側。任何人都可以建議我如何能夠將此功能添加到我現有的代碼?

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) 
    { 
     var objectClass:Class = 
     getDefinitionByName(getQualifiedClassName(e.currentTarget)) as Class; 
     var copy:MovieClip = new objectClass(); 
     this.addChild(copy); 
     copy.x = e.currentTarget.x; 
     copy.y = e.currentTarget.y; 
    } 

    e.currentTarget.x = sx; 
    e.currentTarget.y = sy; 
    e.currentTarget.stopDrag(); 
} 

我也很想包括「本」,孩子們可以拖動字母,如果他們不希望讓他們在舞臺上了。任何想法如何我可以添加此將不勝感激。

非常感謝。

回答

0

如果你想爲拖動的對象類似的行爲(即在拖動後,會創建一個副本)

這些行添加到您的onStop(e)像這樣,

copy.addEventListener(MouseEvent.MOUSE_DOWN, onStart); 
copy.addEventListener(MouseEvent.MOUSE_UP, onStop); 

但是,如果你只想要拖動和預防副本,然後創建另一個函數說dragCopiedObject()和應用拖放在新功能不是抄襲的邏輯

在同一個onStop(e)函數中識別複製或原始對象,並防止複製。

如果你沒有得到它,那麼讓我知道我會詳細解釋給你。

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

copiedObject.hitTestObject(binObject)

對於例如

if(copiedObject.hitTestObject(binObject)) { 

    removeChild(copiedObject); 
} 

UPDATE:要複製的對象使用name屬性像這樣之間辨別:

copy.name = 「複製」;

我已經修改了你的代碼,

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

     var copy:MovieClip = new objectClass(); 
     copy.name = "copy"; //This is newly added 
     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(); 
} 
+0

嗨@Rajneesh。非常感謝您的建議,但我擔心我不明白。我想要複製一次的字母可以被拖動,所以我認爲我應該'在同一'onStop(e)'函數中識別複製或原始對象並防止複製'但我不知道如何寫這個代碼。如果你能解釋它,我會非常感激。 – James

+0

查看UPDATE。 –

+0

非常感謝@Rajneesh。完美的作品!我非常感謝你的幫助! – James