3d树实例

package com.ddd
{
import flash.display.Sprite;

public class Tree extends Sprite
{
public var xpos:Number=0;
public var ypos:Number=0;
public var zpos:Number=0;

public function Tree()
{
init();
}

public function init():void
{
graphics.lineStyle(0, 0xffffff);
graphics.lineTo(0, -140 - Math.random() * 20);
graphics.moveTo(0, -30 - Math.random() * 30);
graphics.lineTo(Math.random() * 80 - 40, -100 - Math.random() * 40);
graphics.moveTo(0, -60 - Math.random() * 40);
graphics.lineTo(Math.random() * 60 - 30, -110 - Math.random() * 20);
}
}
}
package com.ddd
{
import flash.display.Sprite;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

[SWF(backgroundColor=0x000000)]
public class Trees extends Sprite
{
private var trees:Array=[];
private var num:int=100;
private var fl:Number=250;

private var vpX:Number=stage.stageWidth / 2;
private var vpY:Number=stage.stageHeight / 2;

private var float:Number=50;
private var fir:Number=.98;
private var vz:Number=0;

public function Trees()
{
super();
stage.scaleMode=StageScaleMode.NO_SCALE;
init();
}

private function init():void
{
var tree:Tree;
for (var i:int=0; i < num; i++)
{
tree=new Tree;

trees.push(tree);

tree.xpos=Math.random() * 2000 - 1000;
tree.ypos=float;
tree.zpos=Math.random() * 1000;

this.addChild(tree);
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown)

this.addEventListener(Event.ENTER_FRAME, onEnterFrame)
}

private function onEnterFrame(e:Event):void
{
for (var i:int=0; i < num; i++)
{
var tree:Tree=trees[i];
move(tree);
}

vz*=fir;

sortZ();
}

private function move(tree:Tree):void
{
// tree.vy+=g;
//

//
tree.xpos+=tree.vx;
//
tree.ypos+=tree.vy;
tree.zpos+=vz;

// if (tree.ypos > float)
//
{
//
tree.ypos=float;
//
tree.vy*=bounce;
//
}

if (tree.zpos < -fl)
{
tree.zpos+=10000;
}

if (tree.zpos > 10000 - fl)
{
tree.zpos-=10000;
}

var scale:Number=fl / (fl + tree.zpos);

tree.scaleX=tree.scaleY=scale;

tree.x=vpX + tree.xpos * scale;
tree.y=vpY + tree.ypos * scale;
}

private function sortZ():void
{
trees.sortOn("zpos", Array.DESCENDING | Array.NUMERIC);

for (var i:int=0; i < num; i++)
{
setChildIndex(trees[i], i);
}
}

private function onKeyDown(e:KeyboardEvent):void
{
if (e.keyCode == Keyboard.DOWN)
{
vz+=1;
}
else if (e.keyCode == Keyboard.UP)
{
vz-=1;
}


}

}
}
package com.ddd
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;

[SWF(backgroundColor="0x0")]
public class Trees2 extends Sprite
{
private var trees:Array=[];
private var fl:Number=250;
private var num:int=100;
private var vpx:Number=stage.stageWidth / 2;
private var vpy:Number=stage.stageHeight / 2;

private var ax:Number=0;
private var ay:Number=0;
private var az:Number=0;

private var vx:Number=0;
private var vy:Number=0;
private var vz:Number=0;

private var float:Number=50;
private var fir:Number=.98;
private var g:Number=.3;

public function Trees2()
{
super();
init();
}

private function init():void
{
for (var i:int=0; i < num; i++)
{
var tree:Tree=new Tree;

this.addChild(tree);

trees.push(tree);

tree.xpos=Math.random() * 2000 - 1000;
tree.ypos=float;
tree.zpos=Math.random() * 10000;
}

stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);

this.addEventListener(Event.ENTER_FRAME, onEnterFrame)
}

private function onEnterFrame(e:Event):void
{
vx+=ax;
vy+=ay;
vz+=az;

vy-=g;

for (var i:int=0; i < num; i++)
{
var tree:Tree=trees[i];
move(tree);
}

vx*=fir;
vy*=fir;
vz*=fir;
}

private function sortZ():void
{
trees.sortOn("zpos", Array.DESCENDING | Array.NUMERIC);

for (var i:int=0; i < num; i++)
{
var tree:Tree=trees[i];
this.setChildIndex(tree, i);
}
}

private function move(tree:Tree):void
{
tree.xpos+=vx;
tree.ypos+=vy;
tree.zpos+=vz;

if (tree.ypos < float)
{
tree.ypos=float;
}

if (tree.zpos < -fl)
{
tree.zpos+=10000;
}

if (tree.zpos > 10000 - fl)
{
tree.zpos-=10000;
}

var scale:Number=fl / (fl + tree.zpos);

tree.x=vpx + tree.xpos * scale;
tree.y=vpy + tree.ypos * scale;
tree.alpha=scale;
}

private function onKeyDown(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case Keyboard.DOWN:
ay=1;
break;
case Keyboard.UP:
ay=-1;
break;
case Keyboard.LEFT:
ax=-1;
break;
case Keyboard.RIGHT:
ax=1;
break;
case Keyboard.SPACE:
az=1;
break;
}
}

private function onKeyUp(e:KeyboardEvent):void
{
switch (e.keyCode)
{
case Keyboard.DOWN:
az=0
break;
case Keyboard.RIGHT:
ax=0
break;
case Keyboard.SPACE:
ay=0
break;
}

}

}
}




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