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

}
}




posted @ 2012-04-06 17:04  ndljava  阅读(175)  评论(0编辑  收藏  举报