📄 deck.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 + -