text: Main.flyLine = function(angle){
  	
  	var speedRate = 7;//速度倍率
  	var gRate = 100;//重力倍率
  	var flyBird;
  	var stage = Main.stage;
  	var fps = Main.fps;
  	
  	var startX = 0;
  	var startY = 0;
  	var sWidth = Main.width;
  	var sHeight = Main.height;
  	var flySpeed = Main.speed * (Math.random() * 0.2 + 0.8) * speedRate;
  	var flyRad;
  	
  	function initFlyLine() {  
  		// code here.  
  		//Main.stage.removeChild(Main.penguin);
  		Main.penguin.alpha = 0;
  		flyRad = angleToRad(angle);
  		 var flyData = {
  			 images: ["img/fly.png"],
  			 frames: {width:180, height:170},
  			 animations: {fly:[0,2]},
  			 framerate: 6
  		 };
  		 var spriteSheet = new createjs.SpriteSheet(flyData);
  		 flyBird = new createjs.Sprite(spriteSheet, "fly");
  		 flyBird.regX = 105;
  		 flyBird.regY = 105;
  		 stage.addChild(flyBird);
  		 startFly();
  	}
  	
  	var tParam = 0;
  	var g = 9.8 * gRate;
  
  	function clock(){
  		tParam += 1/fps;
  		moveBird(flySpeed, flyRad);
  		// stage.update();
  	}
  	
  	function stageMove(difDistance, totalDistance){
  		Main.fire("moveStage", difDistance, totalDistance);
  	}
  	var offsetX = Main.penguinOffsetX;
  	var offsetY = Main.height - Main.floorLine + 32;
  	var flyStageDistance = Main.visibleDistance;
  	var fadeCnt = 0;
  	// var hitOffsetY = 100;//地平线与击打的距离
  	var hitOffsetY = Main.floorLine - Main.penguin.y - Main.penguinHeight / 2;
  	var tween;
  	function moveBird(speed, rad){
  		var x = speed * Math.cos(rad) * tParam;
  		var y = speed * Math.sin(rad) * tParam - 1/2 * g * square(tParam) + hitOffsetY;//v0*sina-1/2gt2
  		var vy = speed * Math.sin(rad) - g * tParam;
  		var vx = speed * Math.cos(rad);//x轴上的运动速度			
  		var slope = -g / square(speed) / square(Math.cos(rad)) * x + Math.sin(rad) / Math.cos(rad);//抛物线斜率					
  		flyBird.rotation = slope * angle;
  		
  		var dif = vx * 1/fps;
  		if(x + startX > flyStageDistance){	
  			stageMove(dif, x + startX);//舞台一个时间间隔内移动的距离
  		}else{
  			flyBird.x =  sWidth - offsetX - (x + startX);	
  		}
  		//circle.x =  (x + startX);
  		//circle.y =  y;
  		flyBird.y =  sHeight - offsetY - y;
  
  		if(y <= 0 && slope < 0){		
  			//reset				
  			tParam = 0;
  			startX += x;
  			startY = 0;
  			flySpeed = speed * 2.2 / 3;
  			flyRad = rad * 2.2 / 3;
  			fadeCnt ++ ;
  			Main.log(fadeCnt);
  			stopFly();
  			hitOffsetY = 0;
  			Main.log(flyBird.rotation)
  			if(Math.abs(flyBird.rotation) >= 46 && fadeCnt == 1){
  				//角度太大，请它倒立
  				turnDown(flyBird.x, flyBird.y, "down");
  				stopFly();
  				gameOver(x + startX);
  				return;
  			}
  			if(fadeCnt == 3){
  				//end game
  				stopFly();
  				//添加长划痕
  				var slideTime = Math.cos(rad) * 800;		
  				addLongTrace(x, dif, slideTime);
  			}else{
  				tween = createjs.Tween.get(flyBird, {loop:false})
  				.to({rotation:0}, 50, createjs.Ease.bounceOut)
  				.call(function(){
  					startFly();
  					createjs.Tween.removeTweens(tween);
  				});
  				//添加痕迹
  				addTrace(dif);
  			}
  		}
  	}
  
  	var longTracer;
  	function addLongTrace(xPass, dif, timeC){
  		longTracer = new createjs.Bitmap(Resource.get("img/longtraces.png"));
  		stage.addChild(longTracer);
  		longTracer.width = 452;
  		longTracer.height = 14;
  		longTracer.regX = 452;
  		longTracer.regY = -17;
  		longTracer.x = flyBird.x;
  		longTracer.y = flyBird.y;
  		createjs.Ticker.addEventListener("tick", longTracerClock);
  		function longTracerClock(){
  			longTracer.x += dif;
  			stageMove(dif, xPass + startX + 452);
  		}
  		setTimeout(function(){
  			turnDown(flyBird.x, flyBird.y, "slide");
  			createjs.Ticker.removeEventListener("tick", longTracerClock);	
  			
  			gameOver(xPass + startX + 452);
  			//插入成绩牌
  		}, timeC);
  		
  		//遮罩
  			var rect = new createjs.Shape();
              rect.graphics.setStrokeStyle(5, 'round', 'round');
              rect.graphics.beginFill("#FF0000").drawRect(0,0,460, 40);
              rect.graphics.endStroke();
  			rect.x = 200;
  			rect.y = 790;
  			//stage.addChild(rect);
  			longTracer.mask = rect;
  			
  	}
  	function addTrace(dif){
  		var totalD = 0;
  		var tracer = new createjs.Bitmap(Resource.get("img/traces.png"));
  		stage.addChild(tracer);
  		tracer.width = 145;
  		tracer.height = 45;
  		tracer.regX = 92;
  		tracer.regY = -18;
  		tracer.x = flyBird.x;
  		tracer.y = flyBird.y;
  		createjs.Ticker.removeEventListener("tick", tracerClock);
  		createjs.Ticker.addEventListener("tick", tracerClock);
  		function tracerClock(){
  			tracer.x += dif;
  			totalD += dif;
  			if(totalD > sWidth * 2 / 3){
  				Main.log("回收痕迹");
  				createjs.Ticker.removeEventListener("tick", tracerClock);
  				stage.removeChild(tracer);
  			}
  		}
  	}
  	function turnDown(fx, fy, status){
  		Main.stage.removeChild(flyBird);
  		var spriteSheet = Main.gameOverPenguinSS;
  		flyBird = new createjs.Sprite(spriteSheet);
  		Main.stage.addChild(flyBird);
  		flyBird.gotoAndPlay(status);
  		flyBird.x = fx - 120;
  		flyBird.y = fy - 112;		 
  	}
  	
  	function gameOver(distance){
  		//todo
  		
  		Main.fire("gameOver", distance, flyBird.x);
  		
  	}
  	Main.on("replay", function(){
  		// 垃圾回收
  		if(longTracer){
  			Main.log("longTracerDisp")
  			stage.removeChild(longTracer);
  		}
  		stage.removeChild(flyBird);
  		flyBird = null;
  		stopFly();
  	});
  	
  	function stopFly(){
  		 createjs.Ticker.removeEventListener("tick", clock);
  	}
  	function startFly(){
  		stopFly();
  		clock(); // 顺便修正第一次的位置
  		createjs.Ticker.addEventListener("tick", clock);
  	}
  	
  	//角度转弧度
  	function angleToRad(angle){
  		return Math.PI / 180 * angle;
  	}
  	//²
  	function square(num){
  		return num * num
  	}		
  	// 外部运行
  	initFlyLine(angle);
  }