【问题标题】:Drag and drop quiz in Flash在 Flash 中拖放测验
【发布时间】:2015-10-05 10:12:02
【问题描述】:

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


  }

【问题讨论】:

  • 您发布的代码在哪里?场景 2?
  • @BadFeelingAboutThis 这是我用于 Scene2 的代码。所有场景的代码都是相同的。我只是改变了一些重要的变量等等。
  • 如何转移到新场景?我在你的代码中没有看到任何内容
  • 如果你注释掉这一行,它会起作用吗? setChildIndex(MovieClip(e.currentTarget), numChildren - 1);
  • @BadFeelingAboutThis 嗨。谢谢您的帮助。它成功了!非常感谢您的帮助;)

标签: actionscript-3 flash


【解决方案1】:

当您在源自时间轴的显示对象上使用 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]);
        }
    }
}

【讨论】:

  • 嗨。谢谢您的帮助。现在我可以解决我的问题了。我真的很感谢你的帮助! :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多