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();
                }
        }
}

Reply via email to