在as3中拖动-Wapping-Dropping

时间:2015-02-26 11:37:30

标签: actionscript-3 flash

我有4个对象movieClips(假设Card1,Card2,Card3,Card4)。

Card4位于顶部且覆盖Card3的某些部分,与Card3覆盖Card2的某些部分相同,而Card2覆盖了Card1的某些部分。

现在每当我在Card3上拖动Card4时我想做什么。所以,这里Card4应该采取与之前相同的位置或深度。 而card3应该采用Card4 Position手段,以及Card4之前的位置。

我怎样才能做到这一点?这是我的鼠标按下事件。这里的板子是我的容器,我把所有卡片放在显示对象上。

function CardDraging(event:MouseEvent):void
{
    event.target.startDrag();
    currentCard = event.target as DisplayObject;
    board.setChildIndex(currentCard, board.numChildren-1);    
}

1 个答案:

答案 0 :(得分:0)

你应该添加条件:如果当前卡是Card4并且它击中了测试卡3,那么......

if (currentCard == Card4 && currentCard.hitTestObject(Card3))
{
    // If Card3 under Card4, then move Card3 to top.
    if (getChildIndex(Card3) < getChildIndex(Card4))
        swapChildren(Card3, Card4);
}

更新1:

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

addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

var currentCard: MovieClip;

function mouseDown(event: MouseEvent): void
{
    currentCard = event.target as MovieClip;
    currentCard.startDrag();

    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
}

function mouseMove(event: MouseEvent): void
{
    if (currentCard.hitTestObject(Card1))
    {
        if (getChildIndex(Card1) < getChildIndex(currentCard))
            swapChildren(Card1, currentCard);
    }
    else if (currentCard.hitTestObject(Card2))
    {
        if (getChildIndex(Card2) < getChildIndex(currentCard))
            swapChildren(Card2, currentCard);
    }
    else if (currentCard.hitTestObject(Card3))
    {
        if (getChildIndex(Card3) < getChildIndex(currentCard))
            swapChildren(Card3, currentCard);
    }
    else if (currentCard.hitTestObject(Card4))
    {
        if (getChildIndex(Card4) < getChildIndex(currentCard))
            swapChildren(Card4, currentCard);
    }

    event.updateAfterEvent();
}

function mouseUp(event: MouseEvent): void
{
    currentCard.stopDrag();
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
    stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
}

更新2:

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

addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

var currentCard: MovieClip;

function mouseDown(event: MouseEvent): void
{
    currentCard = event.target as MovieClip;
    currentCard.startDrag();

    stage.addEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
    stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
    mouseMove(event);
}

function mouseMove(event: MouseEvent): void
{
    if (currentCard != Card1 && currentCard.hitTestObject(Card1))
    {
        if (getChildIndex(Card1) < getChildIndex(currentCard))
            swapChildren(Card1, currentCard);
    }

    if (currentCard != Card2 && currentCard.hitTestObject(Card2))
    {
        if (getChildIndex(Card2) < getChildIndex(currentCard))
            swapChildren(Card2, currentCard);
    }

    if (currentCard != Card3 && currentCard.hitTestObject(Card3))
    {
        if (getChildIndex(Card3) < getChildIndex(currentCard))
            swapChildren(Card3, currentCard);
    }

    if (currentCard != Card4 && currentCard.hitTestObject(Card4))
    {
        if (getChildIndex(Card4) < getChildIndex(currentCard))
            swapChildren(Card4, currentCard);
    }

    event.updateAfterEvent();
}

function mouseUp(event: MouseEvent): void
{
    currentCard.stopDrag();
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMove);
    stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUp);
}