• AS3多选多模型


    我们每天都面临着选择与被选择的问题,但选择又有诸多限制,在这里做了个模型。有四个店,每个店最多容纳5个客户,有的客户只能进一个特定的店,有的客户能进两个店,但是不管客户是谁,只要店里人满了,即不能再被拖入,实现效果:

    实现代码:

    SelectDrag类:

      1 package
      2 {
      3     import flash.display.DisplayObject;
      4     import flash.display.Sprite;
      5     import flash.events.MouseEvent;
      6     
      7     [SWF(width="1200", height="800", frameRate="20")]
      8     public class SelectDrag extends Sprite
      9     {
     10         public var cir:circle;
     11         public var rec:Rect;
     12         public var sto:storeState;
     13         public var oldX:int;
     14         public var oldY:int;
     15         public var mov:move = new move();
     16         public var voi:VoicePlay = new VoicePlay();
     17         public var recArr:Array=new Array();
     18         public var stoArr:Array=new Array();
     19         public var errArr:Array=new Array();
     20         public var recName:Array=[1,3,2,3];
     21         public var numArr:Array=[0,0,0,0];
     22         public var countTol:int = 0;
     23         
     24         public function SelectDrag()
     25         {
     26             init();
     27         }
     28         
     29         public function init():void
     30         {
     31             createState(4);
     32             createRect(4);
     33             createCircle(40);
     34         }
     35         
     36         public function createCircle(num:int):void
     37         {
     38             
     39             for(var i:int = 0; i<40;i++)
     40             {
     41                 if (i<10)
     42                 {
     43                     cir = new circle(1);
     44                     cir.x = 50 + Math.round(Math.random() * 900);
     45                     cir.y = 50 + Math.round(Math.random() * 400);
     46                     cir.buttonMode = true;
     47                     cir.name="1";
     48                     cir.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
     49                     cir.addEventListener(MouseEvent.MOUSE_UP,onUp);
     50                     addChild(cir);
     51                 }
     52                 else if(i>9 && i<20)
     53                 {
     54                     cir = new circle(2);
     55                     cir.x = 50 + Math.round(Math.random() * 900);
     56                     cir.y = 50 + Math.round(Math.random() * 400);
     57                     cir.buttonMode = true;
     58                     cir.name="2";
     59                     cir.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
     60                     cir.addEventListener(MouseEvent.MOUSE_UP,onUp);
     61                     
     62                     addChild(cir);
     63                 }
     64                 else
     65                 {
     66                     cir = new circle(3);
     67                     cir.x = 50 + Math.round(Math.random() * 900);
     68                     cir.y = 50 + Math.round(Math.random() * 400);
     69                     cir.buttonMode = true;
     70                     cir.name="3";
     71                     cir.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
     72                     cir.addEventListener(MouseEvent.MOUSE_UP,onUp);
     73                     
     74                     addChild(cir);
     75                 }
     76                 
     77             }
     78         }
     79         
     80         
     81         public function createState(num:int):void
     82         {
     83             for(var j:int=0;j<num;j++)
     84             {
     85                 sto = new storeState(1);
     86                 addChild(sto);
     87                 sto.x = 50 + j*250;
     88                 sto.y = 560;
     89             }
     90             for(var l:int=0;l<num;l++)
     91             {
     92                 sto = new storeState(2);
     93                 addChild(sto);
     94                 errArr.push(sto);
     95                 sto.x = 50 + l*250;
     96                 sto.y = 560;
     97             }
     98             for(var k:int=0;k<num;k++)
     99             {
    100                 sto = new storeState(0);
    101                 addChild(sto);
    102                 stoArr.push(sto);
    103                 sto.x = 50 + k*250;
    104                 sto.y = 560;
    105             }
    106         }
    107         
    108         
    109         public function createRect(num:int):void
    110         {
    111             for(var j:int=0;j<num;j++)
    112             {
    113                 rec = new Rect(recName[j]);
    114                 rec.name = String(recName[j]);
    115                 addChild(rec);
    116                 recArr.push(rec);
    117                 rec.x = 50 + j*250;
    118                 rec.y = 600;
    119             }
    120         }
    121         
    122         public function onDown(e:MouseEvent):void
    123         {
    124             oldX = e.currentTarget.x;
    125             oldY = e.currentTarget.y;
    126             e.currentTarget.startDrag(false); 
    127             
    128             // 图层设置,拖拽对象最前显示
    129             setChildIndex(DisplayObject(e.currentTarget),numChildren-1);
    130         }
    131         
    132         
    133         public function onUp(e:MouseEvent):void
    134         {
    135             e.currentTarget.stopDrag();
    136             var judge:Boolean = true;
    137             var spr:Sprite = e.currentTarget as Sprite;
    138             for (var m:int=0;m<recArr.length;m++)
    139             {
    140                 if(e.currentTarget.hitTestObject(recArr[m]))
    141                 {
    142                     judge = false;
    143                     if (e.currentTarget.name==recArr[m].name)
    144                     {
    145                         switch (m)
    146                         {
    147                             case 0:
    148                                 
    149                                 if (numArr[0] > 4)
    150                                 {
    151                                     mov.MoveCall(spr,oldX,oldY,mouseX,mouseY);
    152                                     voi.init(3);
    153                                     break ;
    154                                 }
    155                                 if (numArr[0] == 4)
    156                                 {
    157                                     countTol++;
    158                                     stoArr[0].visible = false;
    159                                     errArr[0].visible = false;
    160                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    161                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    162                                     voi.init(1);
    163                                     
    164                                 }
    165                                 else
    166                                 {
    167                                     stoArr[0].visible = true;
    168                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    169                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    170                                     voi.init(1);
    171                                 }
    172                                 numArr[0]++;
    173                                 
    174                                 
    175                                 break;
    176                             case 1:
    177                                 
    178                                 if (numArr[1] > 4)
    179                                 {
    180                                     mov.MoveCall(spr,oldX,oldY,mouseX,mouseY);
    181                                     voi.init(3);
    182                                     break ;
    183                                 }
    184                                 if (numArr[1] == 4)
    185                                 {
    186                                     countTol++;
    187                                     stoArr[1].visible = false;
    188                                     errArr[1].visible = false;
    189                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    190                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    191                                     voi.init(1);
    192                                 }
    193                                 else
    194                                 {
    195                                     stoArr[1].visible = true;
    196                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    197                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    198                                     voi.init(1);
    199                                 }
    200                             
    201                                 numArr[1]++;
    202                                 break;
    203                             case 2:
    204                                 
    205                                 if (numArr[2] > 4)
    206                                 {
    207                                     mov.MoveCall(spr,oldX,oldY,mouseX,mouseY);
    208                                     voi.init(3);
    209                                     break ;
    210                                 }
    211                                 if (numArr[2] == 4)
    212                                 {
    213                                     countTol++;
    214                                     stoArr[2].visible = false;
    215                                     errArr[2].visible = false;
    216                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    217                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    218                                     voi.init(1);
    219                                     
    220                                 }
    221                                 else
    222                                 {
    223                                     stoArr[2].visible = true;
    224                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    225                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    226                                     voi.init(1);
    227                                 }
    228                                 numArr[2]++;
    229                                 
    230                                 break;
    231                             case 3:
    232                                 if (numArr[3] > 4)
    233                                 {
    234                                     mov.MoveCall(spr,oldX,oldY,mouseX,mouseY);
    235                                     voi.init(3);
    236                                     break ;
    237                                 }
    238                                 if (numArr[3] == 4)
    239                                 {
    240                                     countTol++;
    241                                     stoArr[3].visible = false;
    242                                     errArr[3].visible = false;
    243                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    244                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    245                                     voi.init(1);
    246                                 }
    247                                 else
    248                                 {
    249                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN,onDown);
    250                                     e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP,onUp);
    251                                     stoArr[m].visible = true;
    252                                     voi.init(1);
    253                                 }
    254                                 
    255                                 numArr[3]++;
    256                             
    257                                 break;
    258                         
    259                         }
    260 
    261                         if (countTol == 4)
    262                         {
    263                             trace("游戏结束!!!");
    264                             var suc:SuccessOver = new SuccessOver();
    265                             suc.x = 400;
    266                             suc.y = 200;
    267                             voi.init(2);
    268                             addChild(suc);
    269                         }
    270                     }
    271                     else
    272                     {
    273                         mov.MoveCall(spr,oldX,oldY,mouseX,mouseY);
    274                         stoArr[m].visible = false;
    275                         voi.init(3);
    276                         return ;
    277                     }
    278                     
    279                 }
    280             }
    281             
    282             if(judge)
    283             {
    284                 mov.MoveCall(spr,oldX,oldY,mouseX,mouseY);
    285                 voi.init(3);
    286             }
    287 
    288 
    289         }
    290         
    291         
    292     }
    293 }

    小球实现类,circle:

    package { 
        import flash.display.Sprite;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.text.TextFormat; 
        public class circle extends Sprite { 
            private var xzuobiao:uint; 
            private var yzuobiao:uint; 
            private var spr:Sprite = new Sprite();
            
            public function circle(num:uint) { 
                init(num); 
            } 
            private function init(num:uint):void
            { 
                spr.graphics.beginFill(0xffffff*Math.random()); 
                spr.graphics.lineStyle(1);//设置线条粗细 
                spr.graphics.drawCircle(0,0,20);
                spr.graphics.endFill(); 
                //设置数字 
                var txt_format:TextFormat=new TextFormat(); 
                txt_format.size=30; 
                var txt_num:TextField=new TextField(); 
                txt_num.selectable=false;//设置文本字段不可选 
                
                txt_num.text=""+num; 
                txt_num.width=40; 
                txt_num.height=40; 
                txt_num.x=-20; 
                txt_num.y=-18; 
                txt_num.setTextFormat(txt_format); 
                txt_num.autoSize=TextFieldAutoSize.CENTER; 
                spr.addChild(txt_num); 
                addChild(spr);
            } 
    
        } 
    } 

    门店实现类,Rect:

    package { 
        import flash.display.Sprite;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.text.TextFormat; 
        public class Rect extends Sprite { 
            private var xzuobiao:uint; 
            private var yzuobiao:uint; 
            public function Rect(num:uint) { 
                init(num); 
            } 
            
            private function init(num:uint) { 
                this.graphics.beginFill(0xffffff*Math.random()); 
                this.graphics.lineStyle(1);//设置线条粗细 
                this.graphics.drawRect(0,0,200,200); 
                this.graphics.endFill(); 
                //设置数字 
                var txt_format:TextFormat=new TextFormat(); 
                txt_format.size=30; 
                var txt_num:TextField=new TextField(); 
                txt_num.selectable=false;//设置文本字段不可选 
                txt_num.text=""+num; 
                txt_num.width=40; 
                txt_num.height=40; 
                txt_num.x=0; 
                txt_num.y=0; 
                txt_num.setTextFormat(txt_format); 
                txt_num.autoSize=TextFieldAutoSize.CENTER; 
                this.addChild(txt_num); 
            } 
            
    
            
    
        } 
    } 

    门店状态类,storeState:

    package
    {
        import flash.display.Sprite;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.text.TextFormat;
    
        public class storeState extends Sprite
        {
            public function storeState(count:uint)
            {
                init(count);
            }
            
    
            private function init(cou:uint) { 
                this.graphics.beginFill(0xffffff*Math.random()); 
                this.graphics.lineStyle(1);//设置线条粗细 
                this.graphics.drawRect(0,0,200,40); 
                this.graphics.endFill(); 
                //设置数字 
                var txt_format:TextFormat=new TextFormat(); 
                txt_format.font="黑体";
                txt_format.size=40; 
                var txt_num:TextField=new TextField(); 
                txt_num.selectable=false;//设置文本字段不可选 
                if(cou==0)
                {
                    txt_num.text="欢迎光临"; 
                }
                else if(cou==1)
                {
                    txt_num.text="本店客满";
                }
                else
                {
                    txt_num.text="门票不对";
                }
                
                txt_num.width=40; 
                txt_num.height=40; 
                txt_num.x=85; 
                txt_num.y=0; 
                txt_num.setTextFormat(txt_format); 
                txt_num.autoSize=TextFieldAutoSize.CENTER; 
                this.addChild(txt_num); 
            } 
            
            
        }
    }

    声音播放类,VoicePlay:

    package
    {
        import flash.display.Sprite;
        import flash.media.Sound;
        import flash.net.URLRequest;
    
        public class VoicePlay extends Sprite
        {
            public var arr:Array = ['voice/misstone.mp3','voice/righttone.mp3','voice/great.mp3','voice/move.mp3'];
            public function VoicePlay()
            {
            }
            
            public function init(count:int):void
            {
                var snd:Sound = new Sound(new URLRequest(arr[count]));
                snd.play();
            }
        }
    }

    拖拽缓动类,move:

    package
    {
        import flash.display.DisplayObject;
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.MouseEvent;
        import flash.net.URLLoader;
        import flash.net.URLRequest;
        import flash.utils.getTimer;
        
        [SWF(width="1600",height="800",frameRate="60")]
        public class move extends Sprite
        {
            private var obj:Object;
            private var t:Number;
            private var start:Object; // 起点的属性 集合
            private var to:Object; // 终点的属性集合
            private var startMove:Boolean;
            private var recordTime:Number; // 记录起始的时间点
            
            
            public function move()
            {
                addEventListener(Event.ENTER_FRAME,onFrame);
            }
    
            /**
             * 当点击的时候 
             * @param e
             * 
             */        
            public function MoveCall(spr:Sprite,oldX:int,oldY:int,newX:int,newY:int):void
            {
                var wid:int = spr.width;
                var hei:int = spr.height;
                
                 moveTo(spr,{
                    start:{x:newX,y:newY,wid,height:wid},
                    to:{x:oldX,y:oldY,wid,height:wid}
                 },500);
            }
            
            /**
             * 运动开始 
             * @param obj 谁要运动
             * @param mp 起点状态和终点状态
             * @param t 总花费的时间 ms
             * 
             */        
            private function moveTo(obj:DisplayObject,mp:Object,t:Number):void{
                this.obj = obj;
                this.t = t;
                this.start = mp.start;
                this.to = mp.to;
                startMove = true;
                recordTime = getTimer();
                
                for (var key:String in start){
                    obj[key] = start[key];
                }
                
            } 
            /**
             * 用于计算时间点我的状态并设置当前的状态
             * @param e
             * 
             */        
            private function onFrame(e:Event):void{
               if(!startMove)return;
               var nowTime:Number = getTimer();
               var dTime:Number = nowTime - recordTime;
               // 表示我的移动抵达了终点,不再移动了。
               // 过程
               var per:Number = dTime/t;
               if(per>=1){
                   startMove = false;
                   per=1;
               }
               for (var key:String in to){
                   var dx:Number = to[key] - start[key];
                   obj[key] = dx*per + start[key];
               }
               
            }
            
            
        }
    }

    结束提示类,SuccessOver:

    package
    {
        import flash.display.Loader;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.net.URLRequest;
    
        [SWF(width="1200", height="800", frameRate="20")]
        public class SuccessOver extends Sprite
        {
            public function SuccessOver()
            {
                var loader:Loader = new Loader();
                loader.load(new URLRequest("file/001.swf"));
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function():void
                {
                    addChild(loader);        
                });
            }
        }
    }

    编程资源百度网盘:https://pan.baidu.com/s/1i5pGCE5#list/path=%2F  密码:4vyn

  • 相关阅读:
    20155313 2016-2017-2《Java程序设计》课程总结
    java第四次实验
    java第五次实验
    20155313 实验三《Java面向对象程序设计》实验报告
    20155313 2016-2017-2 《Java程序设计》第十周学习总结
    20155311《Java程序设计》实验五(网络编程与安全)实验报告
    学号20155311 2016-2017-2《Java程序设计》课程总结
    20155311高梓云补交的Mypc课下实践
    20155311 《Java程序设计》实验四 (Android程序设计)实验报告
    20155311 实验三 敏捷开发与XP实践 实验报告
  • 原文地址:https://www.cnblogs.com/Hunter-541695/p/7689318.html
Copyright © 2020-2023  润新知