ActionScript 3拖动在多个特定的targes上拖放,并更改掉落对象以及堆栈目标的ALPA



我一直在尝试实现项目中的三件事而没有成功。我是新手,并且依靠教程来实现这一目标。开始了!!A。我希望能够在targetlabel_3和targetLabel_4上删除Label_3和label_4,但不影响其他标签和目标。b。我希望能够将标签_2放在标签_1的顶部。我发现,当Label_1删除时,它隐藏了targetLabel_2,而Label_2找不到目标。C。我想将每个标签的alpa更改为_1,_2,_3,_4和_5的alpa,当它们掉落在目标上时,然后更改标签_11,_21,_31,_41,_41和_51的APHA。为了使某人更容易看到我要做的事情,APHA到25

我已经在这几天里闲逛了几天,并撞到了砖墙。谁能帮忙?

    import flash.display.DisplayObject;
    import flash.geom.Rectangle;
    /* Drag and Drop
    Makes the specified symbol instance moveable with drag and drop. 
    */
    var startX:Number;
    var startY:Number;
    var counter = 0;
    var attempts = 0;
    var rect:Rectangle;
    rect=new Rectangle(100,100,700,500);
    correct_txt.text=counter;
    attempts_txt.text=attempts;
    label_1.addEventListener(MouseEvent.MOUSE_DOWN,Drag);
    label_1.addEventListener(MouseEvent.MOUSE_UP,Drop);
    label_2.addEventListener(MouseEvent.MOUSE_DOWN,Drag);
    label_2.addEventListener(MouseEvent.MOUSE_UP,Drop);
    label_3.addEventListener(MouseEvent.MOUSE_DOWN,Drag);
    label_3.addEventListener(MouseEvent.MOUSE_UP,Drop);
    label_4.addEventListener(MouseEvent.MOUSE_DOWN,Drag);
    label_4.addEventListener(MouseEvent.MOUSE_UP,Drop);
    label_5.addEventListener(MouseEvent.MOUSE_DOWN,Drag);
    label_5.addEventListener(MouseEvent.MOUSE_UP,Drop);
label_1.buttonMode = true;
label_2.buttonMode = true;
label_3.buttonMode = true;
label_4.buttonMode = true;
label_5.buttonMode = true;
    function Drag(event:MouseEvent):void
    {
event.target.startDrag(true,rect);
feedback_txt.text="";
event.target.parent.addChild(event.target);
startX=event.target.x;
startY=event.target.y;
    }
    function Drop(event:MouseEvent):void
    {
event.target.stopDrag();
var myTargetName:String="target" + event.target.name;
var myTarget:DisplayObject=getChildByName(myTargetName);
if (event.target.dropTarget!=null&&event.target.dropTarget.parent==myTarget){
    feedback_txt.text="Well done! You have selcted the correct label and placed it in the recommended position on the package.";
    feedback_txt.textColor = 0xCC0000   
    event.target.removeEventListener(MouseEvent.MOUSE_UP,Drop);
    event.target.removeEventListener(MouseEvent.MOUSE_DOWN,Drag);
    event.target.buttonMode = false;
    event.target.x=myTarget.x;
    event.target.y=myTarget.y;
    counter++;
    correct_txt.text=counter;
    correct_txt.textColor = 0x0000ff
    attempts++;
    attempts_txt.text=attempts;
    attempts_txt.textColor = 0x0000ff

}else{
feedback_txt.text="Your attempt is not quite correct. You have either selected the incorrect label or placed it in the wrong position. Please try again.";
event.target.x = startX;
event.target.y = startY;
attempts++;
attempts_txt.text = attempts;
}
if (counter==5){
    feedback_txt.text="Well done! You have correctly placed all 5 labels";
percentage_txt.text ="Based on your attempts, you have scored "+Math.round ((counter/attempts) *100)+" %";
percentage_txt.textColor = 0x0000ff     
    }

    }

检测标签何时在另一个标签上的最简单方法是在Enter Frame Event Encerter中使用Hittest。

stage.addEventListener(Event.ENTER_FRAME, hit_test);
function hit_test(e:Event):void{
  if (label_1.hitTestObject(targetLabel_1)) {
    trace("Label_1 is hitting targetlabel_1");
    label_hit();
  }
  if (label_2.hitTestObject(targetLabel_2)) {
    trace("Label_2 is hitting targetlabel_2");
    label_hit();
  }
}

激活hittest时,显示痕量文本并调用函数。要更改标签的alpha,请使用Hittest调用的功能。例如:

function label_hit()
{
  label_1.alpha = 0;
  label_2.alpha = 0;
  label_3.alpha = 0;
}

如果您试图在可以拖动,看到或击中测试的情况下有条件,则该功能也可以照顾它们。例如,如果您不希望标签在Hittest之前可见,则将Alpha设置为0,直到功能将其设置为100。如果您不希望标签可拖动,直到那时,您就可以创建函数内的侦听器。

function label_hit()
{
  label_1.alpha = 100;
  label_1.addEventListener(MouseEvent.MOUSE_DOWN,Drag);
  label_1.addEventListener(MouseEvent.MOUSE_UP,Drop);
}

如果您只想在其他Hittest发生后才发生Hittests,请将其放置在条件下并在功能中满足条件。

stage.addEventListener(Event.ENTER_FRAME, hit_test);
function hit_test(e:Event):void{
  if (label_1.hitTestObject(targetLabel_1)) {
    trace("Label_1 is hitting targetlabel_1");
    label_hit();
  }
  if(condition)
  {
    if (label_2.hitTestObject(targetLabel_2)) {
      trace("Label_2 is hitting targetlabel_2");
      label_hit();
    }
}
function label_hit()
{
  var condition = true;
}

最新更新