在 Flash 中拖放测验

Drag and drop quiz in Flash

我一直在创建这个拖放。它运作良好,很好,很好。首先,我从测验的场景 1 转到场景 2,效果很好。但是,当我从场景 2 移动到测验的场景 3 时,场景 2 的先前答案紧随其后并保持在之前被拖动的相同位置。

有人可以帮我解决这个问题吗?请。我明天需要展示这个:(

stop();
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.display.MovieClip;

var hitArrayClass:Array = new Array(answerTargetQ4, answerTargetQ41, answerTargetQ42, answerTargetQ43, answerTargetQ5, answerTargetQ51, answerTargetQ52, answerTargetQ53, answerTargetQ6, answerTargetQ61, answerTargetQ62, answerTargetQ63, answerTargetQ7, answerTargetQ71, answerTargetQ72,answerTargetQ73);
var dropArrayClass: Array = new Array(answerQ4, answerQ41, answerQ42, answerQ43, answerQ5, answerQ51, answerQ52, answerQ53, answerQ6, answerQ61, answerQ62, answerQ63, answerQ7, answerQ71, answerQ72, answerQ73);
var positionsArrayClass: Array = new Array();


for (var a:int = 0; a < dropArrayClass.length; a++) {
    dropArrayClass[a].buttonMode = true;
    dropArrayClass[a].addEventListener(MouseEvent.MOUSE_DOWN, moveDown);
    dropArrayClass[a].addEventListener(MouseEvent.MOUSE_UP, mUp);

    positionsArrayClass.push({xPos:dropArrayClass[a].x, yPos:dropArrayClass[a].y});

}


function moveDown (e:MouseEvent):void{
    e.currentTarget.startDrag();

    setChildIndex(MovieClip(e.currentTarget), numChildren - 1);

    if (e.currentTarget !=null){
        //e.currentTarget.stopDrag();
    }
}


function mUp(e:MouseEvent):void {
    var dropIndex:int = dropArrayClass.indexOf(e.currentTarget);
    var target:MovieClip = e.currentTarget as MovieClip;

    target.stopDrag();

    if (target.hitTestObject(hitArrayClass[dropIndex])){    
target.x = hitArrayClass[dropIndex].x;
target.y = hitArrayClass[dropIndex].y;

    target.removeEventListener(MouseEvent.MOUSE_DOWN, moveDown);
    target.removeEventListener(MouseEvent.MOUSE_UP, mUp);



} else {
       target.x = positionsArrayClass[dropIndex].xPos;
       target.y = positionsArrayClass[dropIndex].yPos;
   }


  }

当您在源自时间轴的显示对象上使用 setChildIndex(或 addChild)时,它将通过代码而非时间轴进行控制。

您要么不需要使用 setChildIndex,要么在场景更改时通过代码显式删除项目:

function rightBeforeSceneChange():void {
    //iterate over all your items
    for(i:int=0;i<dropArrayClass.length;i++){
        //if they have a parent (eg are on the display) remove them from it
        if(dropArrayClass[i].parent){
            dropArrayClass[i].parent.removeChild(dropArrayClass[i]);
        }
    }
}