+ -
当前位置:首页 → 问答吧 → 拖拽 替换

拖拽 替换

时间:2010-11-16

来源:互联网

我随机生成了两组方块,上面的一组可以随意拖放到下面的目标区域,可以实现任意摆放。但是本人在实现互相替换的过程中出现部分不能替换,帮忙看下!
package {
       import flash.display.Sprite;
       import flash.events.Event;
       import flash.events.MouseEvent;
       import flash.display.DisplayObject;
       public class dragBox extends Sprite {
              private var num_box:uint=6;
              private var _m:Number=126;
              private var _n:Number=100;
              private var _m2:Number=126;
              private var _n2:Number=270;
              private var _j:Number=50;
              private var _id:int;
              private var myArr1:Array=[];
              private var myArr2:Array=[];
              private var tempArr:Array=[];
              private var startX:Number;
              private var startY:Number;
              private var box:Sprite;
              private var moveBox:Sprite;
              private var tempBox:Sprite;
              private var colorBoxArray:Array=new Array  ;//把随机生成的颜色存数组
              private var colorBox:uint;//这是生成的方块的颜色
              private var downMouse:Boolean;//鼠标是否按下
              private var hitNext:Boolean;//是否碰到方块

              public function dragBox() {
                     init();
                     stage.addEventListener(Event.ENTER_FRAME,drag);//定义事件(这个是实时监测的)
              }
              //初始box的位置
              private function init() {
                     for (var k:int=0; k<num_box; k++) {
                            box=makeBox();
                            addChild(box);
                            box.x=_m2+_j*k;
                            box.y=_n2;
                            myArr2.push(box);
                     }
                     for (var i:int=0; i<num_box; i++) {
                            colorBox=Math.random()*0xffffff;
                            colorBoxArray.push(colorBox);
                            moveBox=makeMoveBox(colorBox);
                            addChild(moveBox);
                            moveBox.x=_m+_j*i;
                            moveBox.y=_n;
                            myArr1.push(moveBox);
                     }
                     //drag();
              }
              // 拖动box
              private function drag(e:Event) {//enterFrame的事件
                     for (var i:int=0; i<myArr1.length; i++) {
                            myArr1[i].addEventListener(MouseEvent.MOUSE_DOWN,startB);
                            myArr1[i].addEventListener(MouseEvent.MOUSE_UP,stopB);
                     }
                     if (downMouse==false) {
                            for (var m:int=0; m<myArr1.length-1; m++) {//这个是循环碰撞。这样防止自己跟自己碰撞
                                   for (var n:int=m+1; n<myArr1.length; n++) {
                                          if (myArr1[m].hitTestObject(myArr1[n])) {
                                                 hitNext=true;//碰到了
                                                 myArr1[m].x=myArr1[n].x;
                                                 myArr1[m].y=myArr1[n].y;
                                                 myArr1[n].x=startX;//点击时的方块的值
                                                 myArr1[n].y=startY;
                                                 setChildIndex(myArr1[n],numChildren-1);
                                                 if (hitNext==true) {
                                                        hitNext=false;
                                                        removeChild(myArr1[myArr1.length-1]);//如果碰到的话,就不会重复复制刚才那个方块
                                                        myArr1.splice(myArr1.length-1,1);
                                                        colorBoxArray.splice(myArr1.length-1,1);
                                                 }
                                          } else {
                                                 hitNext=false;
                                          }
                                   }
                            }
                     }
              }
              private function startB(e:MouseEvent) {
                     var sp:Sprite=e.target as Sprite;
                     setChildIndex(sp,numChildren-1);
                     sp.startDrag();
                     startX=sp.x;
                     startY=sp.y;
                     downMouse=true;
                     for (var c:int=0; c<colorBoxArray.length; c++) {//这是把颜色存进去相对性的方块的数组
                            if (sp==myArr1[c]) {
                                   colorBoxArray.push(colorBoxArray[c]);
                                   moveBox=makeMoveBox(colorBoxArray[c]);
                                   addChild(moveBox);
                                   moveBox.x=startX;
                                   moveBox.y=startY;
                                   myArr1.push(moveBox);
                            }
                     }
              }
              private function stopB(e:MouseEvent) {
                     downMouse=false;
                     for (var i:int=0; i<myArr2.length; i++) {
                            var sp:Sprite=e.target as Sprite;
                            sp.stopDrag();
                            if (sp.hitTestObject(myArr2[i])) {
                                   sp.x=myArr2[i].x;
                                   sp.y=myArr2[i].y;
                                   if (tempArr[i]==null) {
                                          tempArr[i]=sp;
                                   }
                            }
                     }
              }
              //绘制box
              private function makeMoveBox(color:uint):Sprite {//里面存一个函数,用来生成颜色的方块
                     var sp:Sprite=new Sprite  ;
                     sp.graphics.beginFill(color);
                     sp.graphics.drawRect(0,0,40,40);
                     sp.graphics.endFill();
                     return sp;
              }
              private function makeBox():Sprite {
                     var sp:Sprite=new Sprite  ;
                     sp.graphics.beginFill(0x999999);
                     sp.graphics.drawRect(0,0,45,45);
                     sp.graphics.endFill();
                     return sp;
              }
       }
}

作者: lzh716   发布时间: 2010-11-16

Oh my  god, we are not debug machines.

作者: enc0717   发布时间: 2010-11-16