How to create a First Person Walker. I mean how to create something
like this:
http://www.infiniteturtles.co.uk/projects/away3d/demos/hacienda/BSPImportTest.html
How to make the next things:
1. Physic(so Like in demo - I can't walk through walls);
2. Jump;
3. Mouse watching(i've realised it in horizontal line, but can't do it
in vertical)
here's my code:
package{
import away3d.cameras.*;
import away3d.containers.Scene3D;
import away3d.containers.View3D;
import away3d.core.math.Number3D;
import away3d.events.MouseEvent3D;
import away3d.lights.*;
import away3d.loaders.*;
import away3d.materials.*;
import away3d.primitives.*;
import flash.display.Sprite;
import flash.events.*;
import flash.ui.Keyboard;
[SWF(width="1024", height="768", frameRate="30",
backgroundColor="0xFAFAFA")]
public class First_Person extends Sprite
{
private var scene:Scene3D;
private var cam:SpringCam;
private var view:View3D;
//private var object:Cube;
private var Cube01:Cube;
private var Cylinder01:Cylinder;
private var Sphere01:WireSphere;
private var lastKey:uint;
private var keyIsDown:Boolean=false;
private var mouseIsDown:Boolean;
private var lastMouseX:Number;
private var lastMouseY:Number;
private var lastPanAngle:Number;
private var lastTiltAngle:Number;
public function First_Person()
{
scene=new Scene3D;
cam=new SpringCam({target:Cube01});
view=new View3D({scene:scene, x:stage.stageWidth/2,
y:stage.stageHeight/2});
addChild(view);
view.scene.addChild(cam);
Cube01=new Cube({height:10, width:10, depth:10, x:0,
y:60, z:0});
view.scene.addChild(Cube01);
cam.mass = 10;
cam.damping = 10;
cam.stiffness = 10;
//cam.y = 100;
//cam.z = 100;
cam.target = Cube01;
cam.lookAt(Cube01.position);
cam.lookOffset = new Number3D(0,0,150);
cam.positionOffset = new Number3D(0, 0, 50);
view.camera=cam;
var axis:Trident=new Trident(150);
view.scene.addChild(axis);
stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
stage.addEventListener(MouseEvent.MOUSE_DOWN,
mouseDown);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function keyDown(e:KeyboardEvent):void
{
lastKey = e.keyCode;
keyIsDown = true;
}
private function keyUp(e:KeyboardEvent):void
{
keyIsDown = false;
}
private function mouseDown(e:MouseEvent):void
{
lastPanAngle=Cube01.rotationY;
//lastTiltAngle=Cube01.rotationZ;
lastMouseX=stage.mouseX;
//lastMouseY=stage.mouseY;
mouseIsDown=true;
}
private function mouseUp(e:MouseEvent):void
{
mouseIsDown=false;
}
private function onEnterFrame(e:Event):void
{
if(keyIsDown)
{
switch(lastKey)
{
case 87 :
Cube01.moveForward(10); break;
case 83 :
Cube01.moveBackward(10); break;
case 65 :
Cube01.moveLeft(10); break;
case 68 :
Cube01.moveRight(10); break;
case Keyboard.RIGHT :
Cube01.yaw(2); break;
case Keyboard.LEFT :
Cube01.yaw(-2); break;
case Keyboard.UP :
Cube01.moveForward(10); break;
case Keyboard.DOWN :
Cube01.moveBackward(10); break;
}
}
if (mouseIsDown)
{
Cube01.rotationY=((stage.mouseX-lastMouseX)*0.2) + lastPanAngle;
//Cube01.rotationZ=((stage.mouseY-lastMouseY)*0.2) +
lastTiltAngle;
}
cam.view;
view.render();
}
}
}