⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ollie.as

📁 Papervision3d的源码
💻 AS
字号:
/**
 * Paperskated3d - simple skateboard simulator in Papervision3d
 * 
 * @author Bartek Drozdz 
 * @version 1.0
 * 
 * Released under Creative Commons Attribution-Non-Commercial-Share Alike 3.0 License.
 */
package com.paperskate3d.tricks {
	
	import caurina.transitions.Tweener;
	import com.everydayflash.util.Rotator;
	import flash.display.DisplayObject;
	import com.paperskate3d.skate.SkateBoard;
	import com.paperskate3d.SkateView;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.geom.Point;
	import flash.utils.Timer;
	
	import com.carlcalderon.arthropod.Debug;

	public class Ollie extends BasicTrick {
		
		private var jumpHeight:Number;
		private var MAX_HEIGHT:Number = 500;
		
		private var nollie:Boolean = false;
		private var landingBounce:Number;
		public var landed:Boolean;
		
		public static var ROTATE:int = 1;
		public static var LEVEL:int = 2;
		public static var DROP:int = 3;
		public static var BOUNCE:int = 4;
		public var phase:int;
		
		private var wheelieTarget:Wheelie = null;

		public function Ollie(nollie:Boolean=false) {
			this.nollie = nollie;
			landed = false;
		}
		
		override public function get name():String { return "ollie" };
		
		override protected function prepareTrick():void {
			phase = ROTATE;
			jumpHeight = speed * 8;
			jumpHeight = Math.min(MAX_HEIGHT, jumpHeight);
			if (nollie) jumpHeight *= .8;
			
			var s:Number = (nollie) ? -135 : 135;
			var a:Number = (nollie) ? -35 : 35;

			if (!nollie) {
				var sf:Number = (speed - SkateView.MINIMAL_TRICK_SPEED) / 4;
				s += sf * 2;
				a += sf * .8;
				if (fromWheelie) a *= .85;
			}

			var jumpRotator:Rotator = new Rotator(this, new Point(s, -35));

			Tweener.addTween(jumpRotator, { 
				rotation:manager.baseRotationX - a, 
				time:TRICK_TIME * .2,
				transition:"easeInOutSine"
				,onComplete:levelUp
			} );
		}
		
		private function levelUp():void {
			phase = LEVEL;
			var s:Number = (nollie) ? 130 : -130;
			var levelRotator:Rotator = new Rotator(this, new Point(s, skateboard.y));
			
			Tweener.addTween(levelRotator, { 
				rotation:manager.baseRotationX, 
				time:TRICK_TIME * .4,
				transition:"easeInOutQuart",
				onComplete:drop 
			} );
			
			climb();
		}
		
		private function climb(e:Event=null):void {
			Tweener.addTween(this, { 
				y:jumpHeight,
				time:TRICK_TIME * .4,
				transition:"easeInOutSine"
			} );
		}
		
		private function drop():void {
			phase = DROP;
			var dx:Number = (wheelieTarget == null) ? 0 : wheelieTarget.wheelieBasePosition[0];
			var dy:Number = (wheelieTarget == null) ? manager.terrainLevel : wheelieTarget.wheelieBasePosition[1];
			var dr:Number = (wheelieTarget == null) ? manager.baseRotationX : wheelieTarget.wheelieBasePosition[2];
			
			var func:Function = (wheelieTarget == null) ? land : end;
			
			//Debug.log("Drop: " + dx + " / " + dy + " / " + dr);
			
			Tweener.addTween(this, { 
				x:dx,
				y:dy,
				rotation:dr,
				time:TRICK_TIME * .4,
				transition:"easeInQuad",
				onComplete:func 
			} );
		}
		
		private function land():void {
			phase = BOUNCE;
			landed = true;
			//Debug.log("Land");
			var sign:int = (Math.random() > .5) ? -1 : 1;
			landingBounce = (3 + Math.random() * 3) * sign * (jumpHeight / MAX_HEIGHT);

			Tweener.addTween(this, { 
				bounce:Math.PI,
				time:TRICK_TIME * .2,
				transition:"easeOutSine",
				onComplete:end 
			} );
			
			skateboard.deck.tiltDeck(jumpHeight / 50, .3);
		}
		
		override protected function finalizeTrick():void {
			//Debug.log("Ollie.finalize");
			if (wheelieTarget != null) {
				wheelieTarget.startFromOllie(speed, playbackSpeed);
			} else {
				skateboard.rotationX = manager.baseRotationX;
				skateboard.z = 0;
				skateboard.y = manager.terrainLevel;
			}
		}
		
		public function get rotation():Number {
			return skateboard.rotationX;
		}
		
		public function set rotation(r:Number):void {
			skateboard.rotationX = r;
		}
		
		public function get x():Number {
			return skateboard.z;
		}
		
		public function set x(nx:Number):void {
			skateboard.z = nx;
		}
		
		public function get y():Number {
			return skateboard.y;
		}
		
		public function set y(ny:Number):void {
			skateboard.y = ny;
		}
		
		public function get bounce():Number {
			return skateboard.y;
		}
		
		public function set bounce(a:Number):void {
			skateboard.rotationX = manager.baseRotationX + Math.sin(a) * landingBounce;
			skateboard.y = Math.sin(a) * Math.abs(landingBounce) * 3;
		}
		
		public function setWheelieTarget(wt:Wheelie):void {
			wheelieTarget = wt;
		}
	}
}







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -