- import flash.display.MovieClip;
- import flash.events.MouseEvent;
- import flash.geom.Point;
- import flash.display.Stage;
- import flash.text.TextField;
- import flash.display.DisplayObject;
- var curMc:MovieClip; //当前拖动状态的mc;
- var packet:MovieClip=Packet; //假设的背包栏;
- var hadMc:Boolean; //判断是否还有在拖动的mc;
- var hitTestObjs:Array=new Array(); //存储要检测的栏位;
- //代码模拟生成物品;
- for(var i:int=0;i<9;i++){
- var goods:MovieClip=new MovieClip();
- //随便加一些物品的属性;
- goods.name="goods_"+i;
- goods.desc="这是物品["+i+"]的描述!随便写点吧,呵呵";
- goods.graphics.beginFill(Math.random()*0xffffff);
- goods.graphics.drawRoundRect(1,1,packet["Item_"+i].width-2,packet["Item_"+i].height-2,8,8);
- goods.graphics.endFill();
- packet["Item_"+i].addChild(goods);
- goods.addChild(getTf("物品"+i));
- packet["Item_"+i].chd=goods;
- //把所有要检测碰撞的栏位框元件,放入列表里;
- hitTestObjs.push(packet["Item_"+i]);
- if(LevelUp["Item_"+i]){
- hitTestObjs.push(LevelUp["Item_"+i]);
- }
- }
- //创建侦听;
- stage.addEventListener(MouseEvent.MOUSE_DOWN,onDrag);
- stage.addEventListener(MouseEvent.MOUSE_UP,onDrag);
- stage.addEventListener(MouseEvent.MOUSE_MOVE,onTips);
- stage.addEventListener(MouseEvent.MOUSE_OUT,onTips);
- //强化按钮侦听;
- LevelUp.btn0.addEventListener(MouseEvent.CLICK,showInfo);
- //开始拖动物品;
- function onDrag(e:MouseEvent):void{
- var mc:MovieClip=e.target as MovieClip;
- if(mc==null)return;//防空
- if(e.type==MouseEvent.MOUSE_DOWN){
- //目标是两个界面的中一个,拖动界面;
- if(e.target.name=="LevelUp"||e.target.name=="Packet"){
- e.target.startDrag();
- return;
- }
- //目标是物品拖动物品;
- if(e.target.name.indexOf("goods")>-1){
- curMc=mc;
- //如果没有在拖动的物品;把栏位的物品置空;这是防止两次Down事件出错!,即第一次点击了拖动又松开了,但物品还在拖动状态,如果再次down将不停拖动,
- if(!hadMc){
- if(mc.parent as MovieClip ){
- (mc.parent as MovieClip ).chd=null;
- }
- }
- dragMc();
- }
- }
- else if(e.type==MouseEvent.MOUSE_UP){
- //目标是两个界面的中一个,停止拖动界面;
- if(e.target.name=="LevelUp"||e.target.name=="Packet"){
- e.target.stopDrag();
- return;
- }
- //防空
- if(curMc==null){
- return;
- }
- //检测碰撞
- for each(var pmc:MovieClip in hitTestObjs){
- if(curMc.hitTestObject(pmc)){
- //换一下坐标;因为要把拖动的放到舞台,这样可以不被其它的元件挡住;
- var pmcpt:Point=new Point(pmc.x,pmc.y);
- pmcpt=pmc.parent.localToGlobal(pmcpt);
- //这里用于判断物品放入栏位内的位置,要小于5个像素差才可放进去,差值不可以太大;
- if(Math.abs(pmcpt.x-curMc.x)>5||Math.abs(pmcpt.y-curMc.y)>5){
- return;
- }
- curMc.stopDrag();
- curMc.x=0;
- curMc.y=0;
- pmc.addChild(curMc);
- //如果要放入的目标格子有物品则交换;
- if(pmc.chd!=null){
- var tmpmc=(pmc as MovieClip).chd;
- //非拖动模式;
- curMc.dragMode=false
- pmc.chd=curMc;
- curMc=tmpmc;
- //还有在拖动的;
- hadMc=true;
- //继续拖动交换后的物品;
- dragMc();
- }else{
- pmc.chd=curMc;
- hadMc=false;
- curMc.dragMode=false
- curMc=null;
- }
- return;
- }
- }
- }
- }
- function dragMc():void{
- if(tf&&tf.parent){
- tf.parent.removeChild(tf);
- tf=null;
- }
- //坐标转换以免点击后有错位表现;
- var pt:Point=new Point(curMc.x,curMc.y);
- pt=curMc.parent.localToGlobal(pt);
- curMc.startDrag();
- //这个防止在拖动显示提示信;
- curMc.dragMode=true;
- //用舞台做中转;
- stage.addChild(curMc);
- curMc.x=pt.x;
- curMc.y=pt.y;
- }
- //做提示文本用;
- var tf:TextField;
- function onTips(e:MouseEvent):void{
- var mc:MovieClip=e.target as MovieClip;
- //如果目标不是物品返回;
- if(mc==null||mc.name.indexOf("goods")==-1){
- return;
- }
- if(e.type==MouseEvent.MOUSE_MOVE){
- //拖动模式,不显示提示;
- if(mc.dragMode){
- return;
- }
- if(tf==null){
- tf=getTf();
- tf.name="tips";
- tf.width=100;
- tf.wordWrap=true;
- tf.multiline=true;
- tf.alpha=0.8;
- tf.background=true;
- tf.backgroundColor=0x3F0909;
- tf.border=true;
- tf.borderColor=0xff9999;
- stage.addChild(tf);
- tf.text=mc.desc;
- tf.height=tf.textHeight+5;
- }
- tf.x=mouseX+10;
- tf.y=mouseY;
- //位置修正
- if(tf.x+tf.width>stage.stageWidth){
- tf.x=mouseX-tf.width-3;
- }
- if(tf.y>stage.stageHeight){
- tf.y=mouseY-tf.height;
- }
- }else if(e.type==MouseEvent.MOUSE_OUT){
- //隐藏提示;
- if(tf&&tf.parent){
- tf.parent.removeChild(tf);
- tf=null;
- }
- }
- }
- //显示信息;
- function showInfo(e:MouseEvent):void{
- if(LevelUp["Item_0"].chd==null){
- msg.text="没有放要强化的装备!";
- return;
- }
- msg.text="要强化的装备:"+LevelUp["Item_0"].chd.name;
- if(LevelUp["Item_1"].chd){
- msg.appendText("\\n材料1:"+LevelUp["Item_1"].chd.name);
- }
- if(LevelUp["Item_2"].chd){
- msg.appendText("\\n材料2:"+LevelUp["Item_2"].chd.name);
- }
- }
- //创建文本框
- function getTf(txt=""):TextField{
- var tf:TextField=new TextField();
- tf.text=txt;
- tf.width=40;
- tf.height=20;
- tf.textColor=0xffffff;
- tf.x=5;
- tf.y=20;
- tf.mouseEnabled=false;
- return tf;
- }
- //该片段来自于http://www.codesnippet.cn/detail/1808201513487.html
来源: http://www.codesnippet.cn/detail/1808201513487.html