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

📄 deck.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.skate {
	
	import flash.geom.Point;
	import org.papervision3d.objects.DisplayObject3D;
	import com.everydayflash.pv3d.modifiers.Bend;
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.BitmapDataChannel;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.objects.primitives.Plane;

	public class Deck extends DisplayObject3D {
		
		[Embed(source = '../../../../assets/deckTop.jpg')]
		private var DeckTop:Class;
		private var deckTopMaterial:MaterialObject3D;
		
		[Embed(source = '../../../../assets/deckBottom.jpg')]
		private var DeckBottom:Class;
		private var deckBottomMaterial:MaterialObject3D;
		
		[Embed(source='../../../../assets/deckAlpha.png')]
		private var DeckAlpha:Class;
		private var alphaMask:BitmapData;
		
		private var deckTop:DisplayObject3D;
		private var deckTopBend:Bend;
		
		private var deckBottom:DisplayObject3D;
		private var deckBottomBend:Bend;
		
		private var deckAngle:Number = 0;
		
		private var tiltForce:Number = 4;
		private var tiltSpeed:Number = .1;
		private var forcedTilt:Boolean = false;
		private var lockedForce:Number = 0;
		private var lockedAngle:Number = 0;
		
		public function Deck() {
			alphaMask = (new DeckAlpha() as Bitmap).bitmapData;
			var zero:Point = new Point(0, 0);
			
			var bmp:BitmapData = new BitmapData(130, 480, true);
			var src:BitmapData = (new DeckTop() as Bitmap).bitmapData;
			bmp.copyPixels(src, src.rect, zero, alphaMask, zero);
			src.dispose();
			src = null;
			
			deckTopMaterial = new BitmapMaterial(bmp);
			deckTop = new Plane(deckTopMaterial, 130, 480, 4, 32);
			addChild(deckTop);
			
			var bmp2:BitmapData = new BitmapData(130, 480, true);
			var src2:BitmapData = (new DeckBottom() as Bitmap).bitmapData;
			bmp2.copyPixels(src2, src2.rect, zero, alphaMask, zero);
			src2.dispose();
			src2 = null;
			
			deckBottomMaterial = new BitmapMaterial(bmp2);
			deckBottom = new Plane(deckBottomMaterial, 130, 480, 4, 16);
			deckBottom.rotationY = 180;
			addChild(deckBottom);
			
			alphaMask.dispose();
			alphaMask = null;
			
			deckTopBend = new Bend(deckTop);
			deckTopBend.constraint = Bend.LEFT;
			deckTopBend.quickBend(.7, .77);
			deckTopBend.freezeVertices();
			deckTopBend.constraint = Bend.RIGHT;
			deckTopBend.quickBend(.7, .23);
			
			deckBottomBend = new Bend(deckBottom);
			deckBottomBend.constraint = Bend.LEFT
			deckBottomBend.quickBend( -.7, .77);
			deckBottomBend.freezeVertices();
			deckBottomBend.constraint = Bend.RIGHT;
			deckBottomBend.quickBend( -.7, .23);
		}
		
		public function set hiquality(v:Boolean):void {
			deckTopMaterial.smooth = v;
			deckBottomMaterial.smooth = v;
		}
		
		public function move(speed:Number):void {
			var inclination:Number;
			
			if(speed > 10 && !forcedTilt) {
				deckAngle += tiltSpeed;
				tiltForce = Math.max(4, tiltForce * .6);
				tiltSpeed = Math.max(.1, tiltSpeed * .9);
				
				inclination = Math.sin(deckAngle) * tiltForce;
				deckTop.rotationY = inclination;
				deckBottom.rotationY = 180 + inclination;
			} else if (forcedTilt) {
				deckAngle = lockedAngle;
				tiltForce += (lockedForce - tiltForce) / 5;
				
				inclination = Math.sin(deckAngle) * tiltForce;
				deckTop.rotationY = inclination;
				deckBottom.rotationY = 180 + inclination;
			}
		}
		
		public function tiltDeck(force:Number, speed:Number=.1):void {
			tiltForce = force;
			tiltSpeed = speed;
		}
		
		public function lockTiltDeck(force:Number, angle:Number):void {
			lockedForce = force;
			lockedAngle = angle;
			forcedTilt = true;
		}
		
		public function releaseTiltDeck(speed:Number=.1):void {
			tiltSpeed = speed;
			forcedTilt = false;
		}
	}
}













⌨️ 快捷键说明

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