为什么立方体会原地旋转啊?
(2009-10-24 19:12:36)
看教程做的 应该是边转弯边向前 现在按下w+a(或者d)它就原地旋转了!!!!!
下面是代码:
package {
import flab3d.*;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import org.papervision3d.core.math.Number3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.cameras.SpringCamera3D;
import org.papervision3d.materials.BitmapMaterial;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.materials.BitmapFileMaterial;
import org.papervision3d.view.layer.util.ViewportLayerSortMode;
import org.papervision3d.core.clipping.FrustumClipping;
import org.papervision3d.objects.parsers.DAE;
import org.papervision3d.objects.primitives.Plane;
public class Game3D extends Sprite {
private var viewport:Viewport3D;
private var renderer:BasicRenderEngine;
private var scene:Scene3D;
private var springCamera:SpringCamera3D;
private var m:BitmapFileMaterial;
private var dae:DAE;
private var plane:Plane;
private var topSpeed:Number=0;
private var topSteer:Number=0;
private var speed:Number=0;
private var steer:Number=0;
private var keyRight:Boolean=false;
private var keyLeft:Boolean=false;
private var keyForward:Boolean=false;
private var keyReverse:Boolean=false;
//
public function Game3D() {
viewport=new Viewport3D(640,480);
addChild(viewport);
scene=new Scene3D();
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
stage.addEventListener(KeyboardEvent.KEY_DOWN,stage_keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,stage_keyUpHandler);
setupScene();
}
private function setupScene():void {
springCamera=new SpringCamera3D ;
springCamera.mass=10;
springCamera.damping=10;
springCamera.stiffness=1;
springCamera.lookOffset=new Number3D(0,0,10);
springCamera.positionOffset=new Number3D(0,5,-15);
springCamera.near=-10000;
renderer=new BasicRenderEngine ;
//
var materials:MaterialsList = new MaterialsList();
materials.addMaterial(new BitmapFileMaterial("map_car.jpg"));
dae = new DAE();
dae.load("a.dae",materials);
dae.scale=50;
springCamera.target=dae;
scene.addChild(dae);
//
plane=new Plane(null,1500,1500,4,4);
plane.pitch(90);
scene.addChild(plane);
}
private function updateCar():void {
dae.yaw(speed * steer / 500);
dae.moveForward(speed);
}
private function driveCar():void {
if (keyForward) {
topSpeed=7;
} else if ( keyReverse ) {
topSpeed=-2;
} else {
topSpeed=0;
}
speed -= ( speed - topSpeed ) / 10;
if (keyRight) {
if (topSteer<45) {
topSteer+=1.5;
}
} else if ( keyLeft ) {
if (topSteer>-45) {
topSteer-=1.5;
}
} else {
topSteer-=topSteer/24;
}
steer -= ( steer - topSteer ) / 2;
}
//
private function stage_keyDownHandler( event :KeyboardEvent ):void {
switch ( event.keyCode ) {
case "W".charCodeAt() :
case Keyboard.UP :
keyForward=true;
keyReverse=false;
break;
case "S".charCodeAt() :
case Keyboard.DOWN :
keyReverse=true;
keyForward=false;
break;
case "A".charCodeAt() :
case Keyboard.LEFT :
keyLeft=true;
keyRight=false;
break;
case "D".charCodeAt() :
case Keyboard.RIGHT :
keyRight=true;
keyLeft=false;
break;
}
}
private function stage_keyUpHandler( event :KeyboardEvent ):void {
switch ( event.keyCode ) {
case "W".charCodeAt() :
case Keyboard.UP :
keyForward=false;
break;
case "S".charCodeAt() :
case Keyboard.DOWN :
keyReverse=false;
break;
case "A".charCodeAt() :
case Keyboard.LEFT :
keyLeft=false;
break;
case "D".charCodeAt() :
case Keyboard.RIGHT :
keyRight=false;
break;
}
}
//
private function enterFrameHandler(event:Event):void {
if (dae) {
driveCar();
updateCar();
}
renderer.renderScene(scene,springCamera,viewport);
}
}
}