actionscript 3.0拖动和交换

时间:2015-05-20 12:55:47

标签: actionscript-3 flash

这是我将影片剪辑拖放到匹配的影片剪辑目标中的代码。我想制作一个拼图游戏,其中所有的部分都在某个地方,当一个部分被拖到另一个部分时,它们会交换两个部分,如果部分与目标匹配,它应该锁定到位并使用此代码保留在那里。唯一的问题是我不知道如何制作件交换位置。有任何想法吗??这有可能吗?请帮忙......

function pickupObject(event:MouseEvent):void {
    event.target.startDrag(true);
    event.target.parent.addChild(event.target);
    objectoriginalX=event.target.x;
    objectoriginalY=event.target.y;
}

function dropObject(event:MouseEvent):void {
    event.target.stopDrag();
    var matchingTargetName:String="target"+ event.target.name;
    var matchingTarget:DisplayObject=getChildByName(matchingTargetName);
    if(event.target.dropTarget != null && event.target.dropTarget.parent==matchingTarget)   {
        event.target.removeEventListener(MouseEvent.MOUSE_DOWN, pickupObject);
        event.target.removeEventListener(MouseEvent.MOUSE_UP, dropObject);
        event.target.buttonMode=false;
        event.target.x=matchingTarget.x;
        event.target.y=matchingTarget.y;
    }
}

1 个答案:

答案 0 :(得分:0)

  1. 将对象拖放到两个不同的数组和x和y位置。考虑3个拖放对象。

    var drag:Array = new Array(drag0, drag1, drag2);
    var drop:Array = new Array(drag0_target, drag1_target, drag2_target);
    var points:Array = new Array({x:drag_0.x, y:drag_0.y},...);
    
    //this regular expression will return a digit number from given string.
    var pattern:RegExp = /\d/;
    
  2. 注意:drop数组对象名称应该以拖动对象名称开头。用于匹配目的

    1. mouse listeners添加到拖动数组对象。
    2. MouseDownHandler()

      e.target.startDrag();

    3. MouseUpHandler()

      //create a tmp variable for store the current drag object number;
      tmp = e.target.name.match(pattern);
      for(i=0;i<drop.length; i++){
          //Check whether the hit occurred in the drop clips                  
          if(MovieClip(e.target).hitTestObject(this.drop[i])){
             //Check whether the object has been dropped in a right place.
             if(drop[i].name.split("_")[0] == e.target.name){               
                 e.target.x = drop[i].x;
                 e.target.y = drop[i].y;
             }else{
                 //else place the drag object into the initial position.
                 e.target.x = points[tmp].x;
                 e.target.y = points[tmp].y;
             }                                             
          }                   
      }
      
    4. 祝你好运。