拖动管理器 - 如何在dragDropHandler中访问拖动事件的目标?

时间:2011-03-29 10:30:37

标签: flex drag-and-drop

我正在制作一个匹配游戏,我左边有一些图像,我可以将它们拖到我右边的图像上,如果它们匹配,它们都应该从舞台上消失。

MXML代码:

<mx:VBox>
<mx:Repeater id="rp" dataProvider="{urlAC}">
<mx:Image width="150" height="150" source="{rp.currentItem}"                                  
mouseMove="initiateDrag(event,event.currentTarget.getRepeaterItem())"/>
</mx:Repeater>
</mx:VBox>
<mx:VBox>
<mx:Repeater id="rp1" dataProvider="{matchAC}">
<mx:Image width="150" height="150" source="{rp1.currentItem}"                              
dragEnter="dragEnterHandler(event, event.currentTarget.getRepeaterItem())"                            
dragDrop="dragDropHandler(event)"/>
</mx:Repeater>
</mx:VBox>

事件处理程序:

        private function initiateDrag(event:MouseEvent,path:String):void
        {
            findMatch(path);

            var dragInitiator:Image = Image(event.currentTarget);
            var datasource:DragSource = new DragSource();
            datasource.addData(matchTarget, "match");  

            DragManager.doDrag(dragInitiator, datasource, event);
        }

        private function dragEnterHandler(event:DragEvent, pathMatch:String):void 
        {
            var dropTarget:Image =event.currentTarget as Image;

            if (event.dragSource.hasFormat("match") && event.dragSource.dataForFormat("match")==pathMatch)
            {
                DragManager.acceptDragDrop(dropTarget);
            }
        }

        private function dragDropHandler(event:DragEvent):void 
        {
            event.currentTarget.source="";
        }

findMatch()是一个函数,它在我的XML文件中找到与正在拖动的文件匹配的文件的路径。有了这条路径,我将它发送到dragEnterHandler,在那里它将它与dropTarget文件的路径进行比较,如果它们相同,则接受它。然后在dragDropHandler中,我将第二个图像的源路径更改为“”,以便它从舞台上消失。如何访问第一个文件(被拖动的文件),以便我可以将其路径更改为“”,以摆脱它?

1 个答案:

答案 0 :(得分:1)

我的第一个猜测是你可以从DragEvent的dragInitiator属性中获取启动拖动的图像对象的实例。

但是,如果由于某种原因无效,您可以随时将图像控件添加为dataSource上的数据。