2009/10/1

zedBox 試作

zedBox是由cj大所開發的as3 libery
由flash 9跟 flash 10

基本上用法跟一般3d 定位方式差不多
提供了兩個特效
AlphaZFilter與BlurZFilter

濾鏡的用法如下,以下是小弟推測的心得
var afilter:AlphaZFilter = new AlphaZFilter();
afilter.nearPlane = 500; //最近平面
afilter.farPlane = 2500;  //最遠平面,在nearPlane~farPlane面的物件將會清楚呈現

afilter.farRange = afilter.nearRange = 1000;
//nearPlane與farPlane外的範圍
//簡單說farPlane(2500)~farPlane+farRange (共3500)範圍內的物件將會逐步的提昇濾鏡效果
       
scene.zFilters.push(afilter);//套用濾鏡

zedBox google code >> http://code.google.com/p/zedbox/
cj blog>>  http://cjcat.blogspot.com/

package 
{
 import flash.display.Graphics;
 import flash.display.MovieClip;
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.filters.BlurFilter;
 import idv.cjcat.zedbox.*;
 import idv.cjcat.zedbox.filters.AlphaZFilter;
 import idv.cjcat.zedbox.filters.BlurZFilter;
 import idv.cjcat.zedbox.geom.Vec3;
 
 public class Main extends Sprite
 {
  private var scene:ZedScene = new ZedScene;
  public function Main():void
  {
   if (stage) init();
   else addEventListener(Event.ADDED_TO_STAGE, init);
  }
  
  private function init(e:Event = null):void 
  {
   removeEventListener(Event.ADDED_TO_STAGE, init);
   // entry point
   
   addChild(scene);
   scene.x = stage.stageWidth * 0.5;
   scene.y = stage.stageHeight * 0.5;
   
   
   for (var i:int = 0; i <= 30; i++)
   {
    var zsp:ZedSprite = buildZsp();
    scene.addChild(zsp);
    zsp.z = 200 * i;
    zsp.x = Math.random() * 1000 - 500;
    zsp.y = Math.random() * 1000 - 500;
    //zsp.x = 200;
    //zsp.y = 200;
    //zsp.z = 200 * i;
    //trace(i);
   }
   
   addEventListener(Event.ENTER_FRAME, onEnterFrame);
   stage.addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel);
   

   var afilter:AlphaZFilter = new AlphaZFilter();
   afilter.nearPlane = 500;
   afilter.farPlane = 2500;   
   afilter.farRange = afilter.nearRange = 1000;
   
   scene.zFilters.push(afilter);
   
   var bfilter:BlurZFilter = new BlurZFilter();
   bfilter.nearPlane = 500;
   bfilter.farPlane = 2500;   
   bfilter.farRange = bfilter.nearRange = 500;
   
   scene.zFilters.push(bfilter);
  
  }
  public function buildZsp():ZedSprite
  {
   var sp:Sprite = new Sprite();
   
   sp.graphics.beginFill(int(Math.random()*255)*255);
   sp.graphics.drawCircle(0, 0,50);
   sp.graphics.endFill();
   
   var zsp:ZedSprite = new ZedSprite();
   zsp.addChild(sp);
   return zsp;
  }
  public function onEnterFrame(e:Event):void
  { 
   scene.render(); 
   scene.camera.position.x = mouseX-stage.stageWidth*0.5;
   scene.camera.position.y = mouseY-stage.stageHeight*0.5;
  }
  public function onMouseWheel(e:MouseEvent):void
  {
   scene.camera.position.z += e.delta * 50;
   //scene.camera.focalLength+= e.delta * 50;
   //scene.camera.zoom+= e.delta
  }
 }
}

沒有留言: