Код AS3:
package ua
{
import org.papervision3d.cameras.SpringCamera3D;
import org.papervision3d.core.math.Number3D;
import org.papervision3d.core.geom.renderables.Vertex3D;
import org.papervision3d.core.geom.Lines3D;
import flash.geom.Rectangle;
import flash.events.Event;
import org.papervision3d.cameras.CameraType;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.materials.special.LineMaterial;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.materials.special.CompositeMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.objects.primitives.PaperPlane;
import org.papervision3d.view.BasicView;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class PlaneObj extends BasicView
{
public var v0:Vertex3D;
public var v1:Vertex3D;
public var c0:Vertex3D;
public var c1:Vertex3D;
public var d0:Vertex3D;
public var d1:Vertex3D;
public var z0:Vertex3D;
public var z1:Vertex3D;
public var z2:Vertex3D;
public var z3:Vertex3D;
public var lm:LineMaterial = new LineMaterial(0x000000);
public var paperPlane:PaperPlane;
private var keyRight:Boolean;
private var keyLeft:Boolean;
private var keyForward:Boolean;
private var keyBackward:Boolean;
public var speed:Number=30
private var KeyFall:Boolean;
private var KeyFly:Boolean;
private var nitro:Boolean;
public function PlaneObj ()
{
super(stage.stageWidth,stage.stageHeight,true,false,CameraType.SPRING);
initCameraControll();
var camera:SpringCamera3D = SpringCamera3D(camera);
camera.mass = 20;
camera.damping = 4;
camera.stiffness = 1;
camera.positionOffset = new Number3D(0,150,-500);
camera.lookOffset = new Number3D(0,0,100);
init ();
startRendering ();
}
private function initCameraControll():void
{
stage.addEventListener (KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.addEventListener (KeyboardEvent.KEY_UP,keyUpHandler);
}
private function keyDownHandler (e:KeyboardEvent):void
{
switch ( e.keyCode )
{
case "W".charCodeAt() :
case Keyboard.UP :
keyForward = true;
break;
case "S".charCodeAt() :
case Keyboard.DOWN :
keyBackward = true;
break;
case "A".charCodeAt() :
case Keyboard.LEFT :
keyLeft = true;
break;
case "D".charCodeAt() :
case Keyboard.RIGHT :
keyRight = true;
break;
case "T".charCodeAt() :
KeyFly = true
break;
case "G".charCodeAt() :
KeyFall = true
break;
case "Z".charCodeAt() :
nitro = true
break;
}
}
private function keyUpHandler (e:KeyboardEvent):void
{
switch (e.keyCode)
{
case "W".charCodeAt() :
case Keyboard.UP :
keyForward = false;
break;
case "S".charCodeAt() :
case Keyboard.DOWN :
keyBackward = false;
break;
case "A".charCodeAt() :
case Keyboard.LEFT :
keyLeft = false;
break;
case "D".charCodeAt() :
case Keyboard.RIGHT :
keyRight = false;
break;
case "T".charCodeAt() :
KeyFly = false
break;
case "G".charCodeAt() :
KeyFall = false
break;
case "Z".charCodeAt() :
nitro = false
break;
}
}
private function init ():void
{
viewport.interactive = true;
v0 = new Vertex3D(0,550,0);
v1 = new Vertex3D(0,-550,0);
c0 = new Vertex3D(550,0,0);
c1 = new Vertex3D(-550,0,0);
d0 = new Vertex3D(0,0,550);
d1 = new Vertex3D(0,0,-550);
var lineN:Lines3D = new Lines3D(lm);
lineN.addNewLine(2,v0.x,v0.y,v0.z,v1.x,v1.y,v1.z);
lineN.addNewLine(2,c0.x,c0.y,c0.z,c1.x,c1.y,c1.z);
lineN.addNewLine(2,d0.x,d0.y,d0.z,d1.x,d1.y,d1.z);
scene.addChild(lineN);
startRendering();
var planeMaterial:CompositeMaterial = new CompositeMaterial();
planeMaterial.addMaterial (new ColorMaterial(0x00CC00));
planeMaterial.addMaterial (new WireframeMaterial(0x484848));
planeMaterial.doubleSided = true;
paperPlane = new PaperPlane(planeMaterial);
scene.addChild (paperPlane);
paperPlane.y = 250;
paperPlane.z = -1000;
camera.z = -1500;
camera.target = paperPlane;
}
private function moveObject ():void
{
if (keyForward)
{
paperPlane.moveForward (speed);
//camera.moveForward (30);
}
else if (keyBackward)
{
paperPlane.moveBackward (speed);
//camera.moveBackward (30);
}
if (keyRight)
{
paperPlane.localRotationY -= 2;
//camera.localRotationY -= 2;
}
else if (keyLeft)
{
paperPlane.localRotationY += 2;
//camera.localRotationY += 2;
}
if(KeyFly){
paperPlane.y += 10;
}
else if(KeyFall){
paperPlane.y -=10
}
if(nitro){
speed = 100
}
else{
speed = 30
}
}
private function doInteractions (e:InteractiveScene3DEvent):void
{
camera.target=e.displayObject3D;
}
override protected function onRenderTick (event:Event = null):void
{
moveObject();
super.onRenderTick ();
}
}
}