solts--flash builder
代码没有进行任何整合和优化。算法比较重要;
package move { import flash.display.BitmapData; import flash.display.Sprite; public class Tile extends Sprite { /** * 单元实体类 * */ /** * 位图数据 * */ private var _bit:BitmapData; /** * 名称 * */ private var _m_type:String=""; public function Tile(_bit:BitmapData) { _bit=_bit; this.graphics.beginBitmapFill(_bit); this.graphics.drawRect(0,0,32,32); this.graphics.endFill(); } public function get m_type():String { return _m_type; } public function set m_type(value:String):void { _m_type = value; } public function get bit():BitmapData { return _bit; } public function set bit(value:BitmapData):void { _bit = value; } } }
package move { import com.greensock.TweenMax; import com.greensock.easing.Back; import com.greensock.easing.Bounce; import flash.display.Sprite; import flash.events.Event; import mx.controls.Alert; import mx.core.UIComponent; public class View extends UIComponent { public var MoveBol:Boolean=false; private var maskSprite:Sprite; public var sourceArr:Array=[]; private var line:Sprite; private var TypeArr:Array=[]; private var solt_index:int=0; public function View() { SetView(); this.addEventListener(SoltsEvent.STOP_MOVE,ViewStopMoveHandler); } /** * 初始化设置 位置 * */ private function SetView():void { for(var i:int=0;i<5;i++) { var vs:ViewSource=new ViewSource(); vs.x=200+i*50; vs.y=300; vs.index=i; vs.interSpeed = 0.1 + Math.random() * 0.4; sourceArr.push(vs); this.addChild(vs); } CreatMask(); SetLine(); } public function setMoveType():void { if(MoveBol) { setType(1); TypeArr=[]; } else { setType(2); } } /** * 设置不同状态 加速或者减速 * */ private function setType(ii:uint=0):void { for(var i:uint=0;i<sourceArr.length;i++) { var vs:ViewSource=sourceArr[i] as ViewSource; vs.type=ii; vs.Start(); } } /** * 设置遮罩 * */ private function CreatMask():void { maskSprite=new Sprite(); maskSprite.graphics.beginFill(0x000000); maskSprite.graphics.drawRect(100,300,400,332); maskSprite.graphics.endFill(); this.mask=maskSprite; } /** * 画两条线 * */ private function SetLine():void { line=new Sprite(); line.graphics.lineStyle(2); line.graphics.beginFill(0,0); line.graphics.drawRect(100,445,400,40); line.graphics.endFill(); this.addChild(line); } private function ViewStopMoveHandler(event:SoltsEvent):void { var arr:Array=event.info as Array; var type:String=arr[0]; } } }
package move { import com.greensock.TweenMax; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; /** * 一列的数组实体类 * */ public class ViewSource extends Sprite { public var BitSourceArr:Array=[]; public var speed:Number=6; public var interSpeed:Number=0.3; /** * 开关?控制加速或者减速 * */ public var type:uint=0; /** * 最大最小高度 * */ private var maxHeight:Number; private var minHeight:Number; /** * 在第几列? * */ public var index:int=0; public function ViewSource() { setViewTile(); } /** * 设置type状态 * */ public function setViewTile():void { for(var i:int=0;i<8;i++) { var how:int=Math.floor(i/4); var sow:int=i%4; var tile:Tile=new Tile(GetBitmapDataClass.GetBitmapData(sow*3,how*4)); switch(i) { case 0: tile.m_type="小船"; break; case 1: tile.m_type="帆船"; break; case 2: tile.m_type="气球"; break; case 3: tile.m_type="飞艇"; break; case 4: tile.m_type="车马"; break; case 5: tile.m_type="帐篷"; break; case 6: tile.m_type="空车"; break; case 7: tile.m_type="满车"; break; } BitSourceArr.push(tile); } BitSourceArr=this.setBitArray(BitSourceArr); setLocation(); this.addEventListener(MouseEvent.MOUSE_DOWN,MouseDownHandler); } /** * 打乱数组排序 * */ private function setBitArray(_ba:Array):Array { var length:uint=_ba.length; var temp1:Array=[]; for(var i:int=0;i<length;i++) { temp1.push(i); } var temp2:Array=[]; for(var ii:int=0;ii<length;ii++) { temp2[ii]=temp1.splice(Math.random()*temp1.length,1); } var temp3:Array=[]; for(var iii:int=0;iii<length;iii++) { temp3[iii]=_ba[temp2[iii]]; } return temp3; } /** * 设置一列的各个位置 * */ private function setLocation():void { for(var i:int=0;i<BitSourceArr.length;i++) { var tile:Tile=BitSourceArr[i] as Tile; tile.y=i*50; this.addChild(tile); } maxHeight=300; minHeight=0; } /** * 开始加速 * */ public function StartMove():void { speed+=interSpeed; if(speed>=20) { speed=20; } } /** * 开始减速 * */ public function StopMove():void { if(speed>1) { speed-=interSpeed; } else { /** * 算法 * */ if( BitSourceArr[1].y > 0 ){ speed = 1; }else{ speed=0; this.removeEventListener(Event.ENTER_FRAME,OnEnterFrameHandler); this.parent.dispatchEvent(new SoltsEvent([Tile(BitSourceArr[4]).m_type,this.index],SoltsEvent.STOP_MOVE)); trace("发送: "+Tile(BitSourceArr[4]).m_type); } } } public function Start():void { this.addEventListener(Event.ENTER_FRAME,OnEnterFrameHandler); } private function OnEnterFrameHandler(event:Event):void { for(var i:int=0;i<BitSourceArr.length;i++) { var tile:Tile=BitSourceArr[i] as Tile; tile.y-=speed; } if(type==1) { this.StartMove(); } else if(type==2) { StopMove(); } if(Tile(BitSourceArr[0]).y<=-50) { var firstOne:Tile = BitSourceArr.shift(); var lastOne:Tile = BitSourceArr[BitSourceArr.length-1]; firstOne.y = lastOne.y + 50; BitSourceArr.push( firstOne ); } } private function MouseDownHandler(event:MouseEvent):void { if(event.target is Tile) { trace(BitSourceArr.indexOf(event.target)+"---"+Tile(event.target).m_type); } } } }
package move { import flash.events.Event; public class SoltsEvent extends Event { public var info:*; public static const STOP_MOVE:String="stop_move"; public function SoltsEvent(_info:*,eventname:String) { super(eventname); this.info=_info; } } }
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" creationComplete="init()"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import move.GetBitmapDataClass; import move.Tile; import move.View; import move.ViewSource; import mx.core.UIComponent; private var view:View; private function init():void { view=new View(); addElement(view); } private function MoveHandler():void { view.MoveBol=!view.MoveBol; view.setMoveType(); } ]]> </fx:Script> <s:Button x="596" y="170" label="按钮" click="MoveHandler()"/> </s:Application>
图形: