package { import flash.display.Sprite; import flash.events.Event; public class Square3D extends Sprite { private var points:Array; private var numPoints:uint=4; private var fl:Number=250; private var vpX:Number=stage.stageWidth/2; private var vpY:Number=stage.stageHeight/2; public function Square3D() { init(); } private function init():void { points = new Array(); points[0]=new Point3D(-80,-80,50); points[1]=new Point3D(80,-80,50); points[2]=new Point3D(80,80,50); points[3]=new Point3D(-80,80,50); //设置每个点的消失点 for (var i:uint = 0; i < numPoints; i++) { points[i].setVanishingPoint(vpX, vpY); } addEventListener(Event.ENTER_FRAME, EnterFrameHandler); } private function EnterFrameHandler(e:Event):void { var dx:Number = mouseX - vpX; var dy:Number = mouseY - vpY; var angleX:Number = dy * 0.001; var angleY:Number = dx * 0.001; var angleZ:Number = Math.sqrt(dx*dx+dy*dy)*0.0005; if (dx>0){angleZ*=-1;} for (var i:uint = 0; i < numPoints; i++) { var point:Point3D=points[i]; point.rotateX(angleX); point.rotateY(angleY); point.rotateZ(angleZ); } graphics.clear(); graphics.lineStyle(0); graphics.moveTo(points[0].screenX, points[0].screenY); for (i = 1; i < numPoints; i++) { graphics.lineTo(points[i].screenX, points[i].screenY); } graphics.lineTo(points[0].screenX, points[0].screenY); } } }