3d基础实例
package com.ddd
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.Event;
public class Fireworks extends Sprite
{
private var balls:Array=[];
private var num:int=50;
private var fl:Number=250;
private var vpX:Number=stage.stageWidth / 2;
private var vpY:Number=stage.stageHeight / 2;
private var g:Number=.98;
private var bounce:Number=-.6;
private var float:Number=200;
public function Fireworks()
{
super();
stage.scaleMode=StageScaleMode.NO_SCALE;
init();
}
private function init():void
{
var ball:Ball;
for (var i:int=0; i < num; i++)
{
ball=new Ball;
balls.push(ball);
ball.ypos=-100;
ball.vx=Math.random() * 6 - 3;
ball.vy=Math.random() * 6 - 6;
ball.vz=Math.random() * 6 - 3;
this.addChild(ball);
}
this.addEventListener(Event.ENTER_FRAME, onEnterFrame)
}
private function onEnterFrame(e:Event):void
{
for (var i:int=0; i < num; i++)
{
var ball:Ball=balls[i];
move(ball);
}
sortZ();
}
private function move(ball:Ball):void
{
ball.vy+=g;
ball.xpos+=ball.vx;
ball.ypos+=ball.vy;
ball.zpos+=ball.vz;
if (ball.ypos > float)
{
ball.ypos=float;
ball.vy*=bounce;
}
if (ball.zpos > -fl)
{
var scale:Number=fl / (fl + ball.zpos);
ball.scaleX=ball.scaleY=scale;
ball.x=vpX + ball.xpos * scale;
ball.y=vpY + ball.ypos * scale;
ball.visible=true;
}
else
{
ball.visible=false;
}
}
private function sortZ():void
{
balls.sortOn("zpos",Array.DESCENDING|Array.NUMERIC);
for(var i:int=0;i<num;i++)
{
setChildIndex(balls[i],i);
}
}
}
}
package com.ddd
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Perspective1 extends Sprite
{
private var ball:Ball;
private var xpos:Number=0;
private var ypos:Number=0;
private var zpos:Number=0;
private var vpX:Number=stage.stageWidth / 2;
private var vpY:Number=stage.stageHeight / 2;
private var fl:Number=250;
public function Perspective1()
{
super();
init()
}
private function init():void
{
ball=new Ball();
this.addChild(ball);
ball.xpos=Math.random() * 2000 - 1000;
ball.ypos=50;
ball.zpos=Math.random() * 1000;
stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeydown)
addEventListener(Event.ENTER_FRAME, onEnterFrame)
}
private function onKeydown(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.DOWN)
{
zpos-=5;
}
if (e.keyCode == Keyboard.UP)
{
zpos+=5;
}
}
private function onEnterFrame(e:Event):void
{
//xpos=mouseX - vpX;
//ypos=mouseY - vpY;
var scale:Number=fl / (fl + zpos);
ball.scaleX=ball.scaleY=scale;
//ball.z=scale;
//ball.scaleZ=zpos;
ball.x=vpX + xpos * scale;
ball.y=vpY + ypos * scale;
}
}
}
package com.ddd
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
public class Perspective2 extends Sprite
{
private var ball:Ball;
private var xpos:Number=0;
private var ypos:Number=0;
private var zpos:Number=0;
private var vx:Number=0;
private var vy:Number=0;
private var vz:Number=0;
private var fl:Number=250;
private var fir:Number=.98;
private var vpX:Number=stage.stageWidth/2;
private var vpY:Number=stage.stageHeight/2;
public function Perspective2()
{
super();
init();
}
private function init():void
{
ball=new Ball;
this.addChild(ball);
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
this.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function onKeyDown(e:KeyboardEvent):void
{
switch(e.keyCode)
{
case Keyboard.DOWN:
vy-=1;
break;
case Keyboard.UP:
vy+=1;
break;
case Keyboard.LEFT:
vx-=1;
break;
case Keyboard.RIGHT:
vx+=1;
break;
case Keyboard.SHIFT:
vz-=1;
break;
case Keyboard.CONTROL:
vz+=1;
break;
}
}
private function onEnterFrame(e:Event):void
{
xpos+=vx;
ypos+=vy;
zpos+=vz;
// vx*=fir;
// vy*=fir;
// vz*=fir;
var radius:Number=ball.radius;
if(xpos+radius>250)
{
xpos=250-radius;
vx*=-1;
}
else if(xpos-radius<-250)
{
xpos=-250+radius;
vx*=-1;
}
if(ypos+radius>250)
{
ypos=250-radius;
vy*=-1;
}
else if(ypos-radius<-250)
{
ypos=-250+radius;
vy*=-1;
}
if(zpos+radius>250)
{
zpos=250-radius;
vz*=-1;
}
else if(zpos-radius<-250)
{
zpos=-250+radius;
vz*=-1
}
if(zpos>-fl)
{
var scale:Number=fl/(fl+zpos);
ball.scaleX=ball.scaleY=scale;
ball.x=vpX+xpos*scale;
ball.y=vpY+ypos*scale;
ball.visible=true;
}
else
{
ball.visible=false;
}
}
}
}