Actionscript 3拖放多个特定目标并更改已删除对象和堆栈目标的alpa

时间:2014-01-23 02:49:45

标签: actionscript-3

我一直试图在项目中完成三件事而没有成功。我是新手,并依靠教程来实现这一目标。开始了!! 一个。我希望能够在labellabel_3和targetlabel_4上删除label_3和label_4,但不会影响其他标签和目标。 湾我希望能够在label_1删除后将label_2放在label_1的顶部。我发现当label_1被删除时,它会隐藏targetlabel_2而label_2无法找到它的目标。 C。我想将每个标签_1,_2,_3,_4和_5的Alpa在它们的目标上删除时更改为零,并将标签_11,_21,_31,_41和_51的Apha更改为100.(我已更改)为了让某人更容易看到我想要做的事情,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     
    }


    }

1 个答案:

答案 0 :(得分:0)

检测标签何时在另一个标签上的最简单方法是在输入框架事件监听器中使用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);
}

如果您希望仅在其他测试已经发生之后才进行测试,请将它们置于条件中并在函数中满足条件。

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;
}