pv3d 键盘控制 平移摄像非物体失败 求助
king26951 (2010-08-08 12:03:02)
package {
import flash.display.Sprite;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import org.papervision3d.cameras.CameraType;
import flash.events.Event;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.view.BasicView;
public class nb extends BasicView
{
private var grid:DisplayObject3D;
private var rotX:Number = 0.5;
private var rotY:Number = 0.5;
private var camPitch:Number = 90;
private var camYaw:Number = 270;
private var camTarget:DisplayObject3D;
private var keyR:Boolean;//右
private var keyL:Boolean;//左
private var keyW:Boolean;//上
private var keyS:Boolean;//下
private var keyQ:Boolean;
private var keyE:Boolean;
public function nb()
{
super(stage.stageWidth,stage.stageHeight,true,false,CameraType.FREE);
stage.frameRate = 40;
init();
startRendering();
}
private function init():void
{
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);
grid = new DisplayObject3D();
scene.addChild(grid);
var numberOfColumns:int = 14;
var numberOfRows:int = 10;
var planeSize:int = 80;
var planeSpacing:Number = 86;
var centerOffsetX:Number = numberOfColumns * planeSpacing * 0.5 - planeSpacing * 0.5;
var centerOffsetY:Number = numberOfRows * planeSpacing * 0.5 - planeSpacing * 0.5 ;
for(var i:uint = 0; i < numberOfColumns; i++)
{
for(var j:uint = 0; j < numberOfRows; j++)
{
var plane:Plane = new Plane(new ColorMaterial(Math.random() * 0xFFFFFF), planeSize,planeSize);
plane.material.doubleSided = true;
plane.x = i * planeSpacing - centerOffsetX;
plane.y = j * planeSpacing - centerOffsetY;
grid.addChild(plane);
camera.focus = 20;
camera.target = grid;
camera.fov = 20;
}
}}
private function keyDownHandler(e:KeyboardEvent):void
switch( e.keyCode)
{
case "W".charCodeAt():
case Keyboard.UP:
keyW = true;
keyS = false;
break;
case "S".charCodeAt():
case Keyboard.DOWN:
keyS = true;
keyW = false;
break;
case "A".charCodeAt():
case Keyboard.LEFT:
keyL = true;
keyR = false;
break;
case "D".charCodeAt():
case Keyboard.RIGHT:
keyR = true;
keyL = false;
break;
case "Q".charCodeAt():
keyQ = true;
keyE = false;
break;
case "E".charCodeAt():
keyE = true;
keyQ = false;
break;
}
}
private function keyUpHandler(e:KeyboardEvent):void
{
switch(e.keyCode)
{
case "W".charCodeAt():
case Keyboard.UP:
keyW = false;
break;
case "S".charCodeAt():
case Keyboard.DOWN:
keyS = false;
break;
case "A".charCodeAt():
case Keyboard.LEFT:
keyL = false;
break;
case "D".charCodeAt():
case Keyboard.RIGHT:
keyR = false;
break;
case "Q".charCodeAt():
keyQ = false;
break;
case "E".charCodeAt():
keyE = false;
break;
}
}
override protected function onRenderTick(e:Event=null):void
{
moveObject();
camera.target = null;
super.onRenderTick();
}
private function moveObject():void
{
if(keyW)
{
camera.moveUp(30);
}
else
if(keyS)
{
camera.moveDown(30);
}
if(keyR)
{
camera.moveRight(30);
}
else
if(keyL)
{
camera..moveLeft(30);
}
if(keyQ)
{
camera..moveForward(30);
}
else
if(keyE)
{
camera..moveBackward(30);
}
现在是只能远近缩放 不能平移。求助大家