как перетащить круг из одного контейнера в другой контейнер в проекте Flex - PullRequest
0 голосов
/ 13 января 2012

Я создаю проект flex Air, поэтому файл mxml будет запущен.
У меня есть круги в одном Большом круге с одной стороны и будут такими же с другой.

Теперь, как перетащить любой круг из любого Большого круга на другую сторону. Или это может быть как два контейнера с кружками, тогда как перетащить кружок?

Для одного круга я могу выполнять перетаскивание. Но мне нужен один Большой круг с левой стороны и один большой круг с правой стороны. И маленькие круги с именами классов будут в этих больших кругах. Теперь я хочу перетащить эти маленькие круги в большие круги. Большие циклы не должны двигаться. Пожалуйста, помогите мне. Даже я пробовал этот код в Actionscript

    package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.text.engine.GroupElement;

    public class lastWork extends Sprite
    {
        public function lastWork()
        {
            drawBigCircles(200,100,100);
            drawBigCircles(400,280,100);
        drawCircles(190,90,15);
        drawCircles(180,130,15);
        drawCircles(150,70,15);
        drawCircles(400,240,20);

        }
        public function drawBigCircles(x:Number,y:Number,radius:Number):void{
            var circle:Sprite=new Sprite();
            circle.graphics.beginFill(0xFFCC00,1);
            circle.graphics.lineStyle(1,0x666666);


            circle.graphics.drawCircle(x,y,radius);
            this.addChild(circle);
            addChild(circle);
        }
        public function drawCircles(x:Number,y:Number,radius:Number):void
        {
            var group:GroupElement =new GroupElement();

            var circle:Sprite=new Sprite();
            circle.graphics.beginFill(0xFFCC00,1);
            circle.graphics.lineStyle(1,0x666666);


            circle.graphics.drawCircle(x,y,radius);
            this.addChild(circle);
            addChild(circle);
            circle.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown) 

            function mouseDown(event:MouseEvent):void
            {
                circle.startDrag();
            }
            circle.addEventListener(MouseEvent.MOUSE_UP, mouseReleased);

            function mouseReleased(event:MouseEvent):void
            {
                circle.stopDrag();
                trace(circle.dropTarget.name);
            }
        }

    }
}

Но в этом я хочу, чтобы большие круги не двигались, а маленькие круги нужно только перетаскивать. Если вы также можете сказать мне, как поместить любой текст в эти маленькие круги. Маленький кружок с текстом в нем следует перетаскивать на другие большой круг.

1 Ответ

0 голосов
/ 14 января 2012

Зачем беспокоиться о 2 контейнерах?Просто создайте пользовательский компонент и перетащите в него круги (код ниже даже работает в мобильном проекте Flex с представлением):

enter code here

MyApp.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:comps="*">
    <comps:MyCircle width="100%" height="100%"/>
</s:Application>

MyCircle.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:UIComponent 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    width="100%" height="100%">

    <fx:Script>
        <![CDATA[
            import flash.filters.*;

            public static const SHADOW:Array = [ new DropShadowFilter(10, 80, 0x000000, 0.5, 32, 32, 1, 1, false, false, false) ];
            private var dX:Number, dY:Number;
            private var circle:Shape = new Shape();

            override protected function createChildren():void {
                super.createChildren();

                circle.graphics.beginFill(0xFF0000);
                circle.graphics.drawCircle(0, 0, 20);
                addChild(circle);

                addEventListener(MouseEvent.MOUSE_DOWN, handleDown);
            }

            override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
                super.updateDisplayList(unscaledWidth, unscaledHeight);

                circle.x = unscaledWidth / 2;
                circle.y = unscaledHeight / 2;
            }

            private function handleDown(event:MouseEvent):void {
                dX = circle.x - stage.mouseX;
                dY = circle.y - stage.mouseY;
                circle.scaleX = circle.scaleY = 1.5;
                circle.filters = SHADOW;
                //startDrag();
                stage.addEventListener(MouseEvent.MOUSE_MOVE, handleDrag);
                stage.addEventListener(MouseEvent.MOUSE_UP, handleUp);
            }

            private function handleDrag(event:MouseEvent):void {
                circle.x = stage.mouseX + dX;
                circle.y = stage.mouseY + dY;
                event.updateAfterEvent();
            }

            private function handleUp(event:MouseEvent):void {
                circle.filters = null;
                circle.scaleX = circle.scaleY = 1;
                //stopDrag();
                stage.removeEventListener(MouseEvent.MOUSE_MOVE, handleDrag);
                stage.removeEventListener(MouseEvent.MOUSE_UP, handleUp);
            }

        ]]>
    </fx:Script>
</mx:UIComponent>
...