研究所 各位老师 谢谢了 偶来交作业~~
影子607 (2009-12-30 19:36:52)
这两天学pv3d 看了这里的不少教程
做了一个小练习 3d墙
(*^__^*) 嘻嘻…… 算是偶交的作业吧
非常感谢 希望再出新教程~
http://flash.9ria.com/viewthread.php?tid=42591&extra=package {
import flash.display.*;
import flash.events.*;
import flash.filters.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.geom.Matrix;
import flash.geom.Point;
import flab3d.*;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.events.FileLoadEvent;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.materials.*;
import org.papervision3d.objects.*;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
public class PicBall4 extends Sprite {
private var viewport:Viewport3D;
private var renderer:BasicRenderEngine;
private var scene:Scene3D;
private var camera:FlabCamera3D;
private var OBJ_LENGTH:int=9;
static private const CIRCLE_RANGE:int=550;
private var speedx:Number=0;
private var speedy:Number=0;
private var wraps:DisplayObject3D;
private var url:URLRequest=new URLRequest("pic.xml");
private var urlLoader:URLLoader;
private var xml:XML;
private var n=0;//pic index
private var isDown:Boolean=true;
private var wrap:DisplayObject3D;
private var rot:Number;
private var m:BitmapFileMaterial;
private var list:Array=[];
public function PicBall4() {
viewport=new Viewport3D(550,400);
renderer=new BasicRenderEngine ;
scene=new Scene3D ;
camera=new FlabCamera3D ;
addChild(viewport);
stage.scaleMode=StageScaleMode.NO_SCALE;
stage.align=StageAlign.TOP_LEFT;
stage.quality=StageQuality.HIGH;
xmlLoad();
}
public function xmlLoad() {
urlLoader=new URLLoader ;
urlLoader.load(url);
urlLoader.addEventListener(Event.COMPLETE,onComplete);
urlLoader.addEventListener(IOErrorEvent.IO_ERROR,onError);
}
private function onComplete(evt:Event):void {
xml=XML(evt.target.data);
OBJ_LENGTH=xml.pic.length();
init();
}
private function onError(evt:IOErrorEvent):void {//XML加载出错
trace("配置文件加载失败");
}
public function init():void {
//camera.focus=300;
// camera.zoom=1;
// camera.x=0;
// camera.y=0;
// camera.z=1000;
camera.rotationX=5;
wrap=new DisplayObject3D ;
viewport.interactive=true;
for (var i:int=0; i
var loader:Loader=new Loader ;
trace(xml.pic[i].@id.toString());
loader.load(new URLRequest(xml.pic[i].@id.toString()));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,Thumb_loaded);
}
addEventListener(Event.ENTER_FRAME,enterFrameHandler);
scene.addChild(wrap);
viewport.interactive=true;
}
private function Thumb_loaded(e:Event) {
///////////
var file=e.target.loader;
var mc:MovieClip=new MovieClip ;
createRef(file,mc);
mc.addChild(file);
var movieMaterial:MovieMaterial=new MovieMaterial(mc);
movieMaterial.doubleSided=true;
movieMaterial.interactive=true;
trace("num",mc.numChildren);
rot=360*n/OBJ_LENGTH;
n++;
var o:Plane=new Plane(movieMaterial,300,300,2,2);
o.x=CIRCLE_RANGE*Math.sin(rot*Math.PI/180);
o.y=0;
o.z=CIRCLE_RANGE*Math.cos(rot*Math.PI/180);
o.rotationY=180+rot;
wrap.addChild(o);
o.addEventListener(InteractiveScene3DEvent.OBJECT_OVER,onInter1);
o.addEventListener(InteractiveScene3DEvent.OBJECT_OUT,onInter2);
o.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK,onPlaneClick);
}
private function onPlaneClick(evt:InteractiveScene3DEvent):void {
isDown=! isDown;
if (isDown==false) {
trace(isDown)
camera.tweenTo(Plane(evt.currentTarget),0);
} else {
trace(isDown)
camera.tweenTo(Plane(evt.currentTarget),600);
//camera.resetToZero();
}
}
private function onInter1(e:InteractiveScene3DEvent):void {
var my_tew1:Tween=new Tween(e.target,"scaleX",Elastic.easeOut,1,1.2,3,true);
var my_tew2:Tween=new Tween(e.target,"scaleY",Elastic.easeOut,1,1.2,3,true);
//e.target.scaleX=1.2;
//e.target.scaleY=1.2;
}
private function onInter2(e:InteractiveScene3DEvent):void {
var my_tew1:Tween=new Tween(e.target,"scaleX",Elastic.easeOut,1.2,1,3,true);
var my_tew2:Tween=new Tween(e.target,"scaleY",Elastic.easeOut,1.2,1,3,true);
//e.target.scaleX=1;
//e.target.scaleY=1;
}
private function enterFrameHandler(event:Event):void {
speedx=stage.mouseX>stage.stageWidth/2?1:-1;
if (stage.mouseX>stage.stageWidth/2-20&&stage.mouseX speedx=0;
}
wrap.yaw(speedx);
renderer.renderScene(scene,camera,viewport);
}
private function createRef(p_source:DisplayObject,mc:MovieClip):void {//倒影
var bd:BitmapData=new BitmapData(p_source.width,p_source.height,true,0);
var mtx:Matrix=new Matrix ;
mtx.d=-1;
mtx.ty=bd.height;
bd.draw(p_source,mtx);
var width:int=bd.width;
var height:int=bd.height;
mtx=new Matrix ;
mtx.createGradientBox(width,height,0.5*Math.PI);
var shape:Shape=new Shape ;
shape.graphics.beginGradientFill(GradientType.LINEAR,[0,0],[0.7,0],[0,0xFF],mtx);
shape.graphics.drawRect(0,0,width,height);
shape.graphics.endFill();
var mask_bd:BitmapData=new BitmapData(width,height,true,0);
mask_bd.draw(shape);
bd.copyPixels(bd,bd.rect,new Point(0,0),mask_bd,new Point(0,0),false);
var ref:Bitmap=new Bitmap ;
ref.y=p_source.height;
ref.bitmapData=bd;
ref.alpha=0.5;
mc.addChild(ref);
}
}
}