2016-02-04 122 views
-1

我有一个拖放项目中,每次我点击一个影片剪辑的克隆是由可拖动。我想知道如何制作一个按钮,可以在按下按钮时重置/删除克隆。在Flash(AS3)制作一个复位放置的对象按钮

这是我走到这一步:

import flash.display.MovieClip; 


var latestClone:MovieClip; 

plus.addEventListener(MouseEvent.MOUSE_DOWN, onPlusPressed); 

function onPlusPressed(event:MouseEvent):void 
{ 

latestClone = new Plus(); 

latestClone.x = event.stageX; 
latestClone.y = event.stageY; 

addChild(latestClone); 

latestClone.startDrag(); 

latestClone.addEventListener(MouseEvent.MOUSE_DOWN, latestClone.startDrag); 

} 

stage.addEventListener(MouseEvent.MOUSE_UP, onStageReleased); 

function onStageReleased(event:MouseEvent):void 
{ 

if(latestClone != null){ 

    latestClone.stopDrag(); 

} 
} 
+0

查找'removeChildAt'最近删除添加的 “克隆”。使用'For Loop'一次删除多个克隆。最好你addChild一切到一个容器MovieClip然后你可以运行循环对'container_MC.removeChildAt();'也更容易检查多少克隆MovieClip包含等等...... –

回答

0

添加所有克隆的一个数组,循环阵列上方,并在阵列中的每个项目做一个removeChild。所以:

var items:Array = new Array(); 
.... 
addChild(latestClone); 
items.push(latestClone); 
.... 
var resetButton:SimpleButton = new SimpleButton(); 
//set your button properties here 
resetButton.addEventListener(MouseEvent.CLICK, onResetClicked); 
addChild(resetButton); 

function onResetClicked(e:MouseEvent):void 
{ 
    reset(); 
} 
function reset():void 
{ 
    for (var i:uint = 0; i < items.length; i ++) 
    {  
     removeChild(items[i]); 
     items[i] = null; 
    } 
    items = new Array(); 
} 

希望这会有所帮助。

+0

谢谢你的回复古尔特杰,但我不'不知道如何使用您发布的内容来制作可以重置在舞台上拖动的克隆的按钮。任何进一步的帮助将不胜感激。 – New2AS3

+0

我已经发布了实际的逻辑,创建一个新的按钮,并调用我从按钮的鼠标单击侦听器发布的重置功能。 –

+0

嗨,我已经添加了一些示例代码,以了解如何创建按钮并向其添加侦听器。希望这回答你的问题。 –

0

我用的是张贴+正在寻找其他问题的代码测试的几种可能找到了解决我的问题。

这是工作的代码:把所有的克隆内,比美国可以把它清除掉很easely

var clone_container:Sprite = new Sprite(); 

import flash.display.MovieClip; 
import flash.events.MouseEvent; 

var latestClone:MovieClip; 

plus.addEventListener(MouseEvent.MOUSE_DOWN, onPlusPressed); 

function onPlusPressed(event:MouseEvent):void 
{ 

latestClone = new Plus(); 

latestClone.x = event.stageX; 
latestClone.y = event.stageY; 

addChild(latestClone); 

latestClone.startDrag(); 

latestClone.addEventListener(MouseEvent.MOUSE_DOWN,onClonedPlusPressed); 

} 

function onClonedPlusPressed(event:MouseEvent):void{ 


latestClone = MovieClip(event.currentTarget); 


latestClone.startDrag(); 
} 

stage.addEventListener(MouseEvent.MOUSE_UP, onStageReleased); 

function onStageReleased(event:MouseEvent):void 
{ 

if(latestClone != null){ 

latestClone.stopDrag(); 
items.push(latestClone); 
} 
} 



resetButton.addEventListener(MouseEvent.CLICK, fl_MouseClickHandler); 



function fl_MouseClickHandler(event:MouseEvent):void 
{ 



} 

var items:Array = new Array(); 






resetButton.addEventListener(MouseEvent.CLICK, onResetClicked); 
addChild(resetButton); 

function onResetClicked(e:MouseEvent):void 
{ 
reset(); 
} 
function reset():void 
{ 
for (var i:uint = 0; i < items.length; i ++) 
{  items[i].removeEventListener(MouseEvent.MOUSE_DOWN,onClonedPlusPressed); 
    if(items[i].parent) items[i].parent.removeChild(items[i]); 
     items[i] = null; 
} 
items = new Array() 



} 
+0

您需要在重置函数中再增加一行才能从克隆中移除事件侦听器,否则克隆对象将永远留在内存中,并且不会被垃圾收集:items [i] .removeEventListener(MouseEvent.MOUSE_DOWN,onClonedPlusPressed); – Philarmon

+0

谢谢,Philarmon – New2AS3

0

只是声明容器变量,像这样

while(clone_container.numChildren > 0){ 
    clone_container.removeChildAt(0); 
} 

这一切..

0

您最加的数组和对象推到这个,

您的解决方案:

import flash.display.MovieClip; 
import flash.events.Event; 
var latestClone:MovieClip; 
plus.addEventListener(MouseEvent.MOUSE_DOWN, onPlusPressed); 
var plusArray:Array = new Array(); 

resetbtn.addEventListener(MouseEvent.CLICK,resetFunc); 
function resetFunc(e:Event) 
{ 
    for (var i=0; i<plusArray.length; i++) 
    { 
     removeChild(plusArray[i]); 
    } 
    plusArray = new Array() 
} 

function onPlusPressed(event:MouseEvent):void 
{ 

    latestClone = new Plus(); 

    latestClone.x = event.stageX; 
    latestClone.y = event.stageY; 

    plusArray.push(latestClone); 
    addChild(plusArray[plusArray.length-1]); 
    plusArray[plusArray.length - 1].startDrag(); 
    plusArray[plusArray.length - 1].addEventListener(MouseEvent.MOUSE_DOWN, plusArray[plusArray.length-1].startDrag); 

} 

stage.addEventListener(MouseEvent.MOUSE_UP, onStageReleased); 

function onStageReleased(event:MouseEvent):void 
{ 

    if (latestClone != null) 
    { 

     latestClone.stopDrag(); 

    } 
} 

好运