拖拽 替换
时间: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;
}
}
}
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28