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>
图形:


浙公网安备 33010602011771号