在 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]);
}
}
}
我一直在创建这个拖放。它运作良好,很好,很好。首先,我从测验的场景 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]);
}
}
}