away3D的camora之旋转缓动加速实例

/*在fb下新建as项目运行此实例*/
1、 Basic06HoverCamera3D.as


package{

import away3d.cameras.HoverCamera3D;

import away3d.cameras.TargetCamera3D;

import away3d.containers.View3D;

import away3d.core.base.Object3D;

import away3d.events.MouseEvent3D;

import away3d.primitives.Cone;

import away3d.primitives.Cube;

import away3d.primitives.Sphere;

import flash.display.Sprite;

import flash.events.Event;

import flash.events.KeyboardEvent;

import flash.ui.Keyboard;

[SWF(width="500", height="400", frameRate="60", backgroundColor="#FFFFFF")]

public class Basic06HoverCamera3D extends Sprite{

private var cam:HoverCamera3D;

private var lastKey:uint;

private var keyIsDown:Boolean = false;

private var View:View3D;
private var cover:Cover;

private var sphere:Sphere;
private var cone:Cone;
private var cube:Cube;

public function Basic06HoverCamera3D(){
cam = new HoverCamera3D(); // create a basic camera
cam.z = -1000; // make sure it's positioned away from the default 0,0,0 coordinate
cam.panangle = 0;
cam.tiltangle = 0;
cam.targetpanangle = 0;
cam.targettiltangle = 0;
cam.mintiltangle = -90;
View = new View3D({camera:cam, x:250, y:200}); // create a viewport
addChild(View);
// make some objects and put it on the 3D stage
sphere = new Sphere({material:"red#black", radius:50});
View.scene.addChild(sphere);
cone = new Cone({material:"green#black", radius:50, height:100, x:-150});
View.scene.addChild(cone);
cube = new Cube({material:"blue#black", depth:100, width:100, height:100, x:150});
View.scene.addChild(cube);
// add a huge surrounding sphere so we really can see what we're doing
var largeSphere:Sphere = new Sphere({radius:1500, material:"yellow#black"});
largeSphere.invertFaces();
View.scene.addChild(largeSphere);
cam.hover();
View.render();
cover = new Cover(this); // only run when user is above the SWF
addChild(cover);
this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
// Listen for clicks on the objects
sphere.addEventListener(MouseEvent3D.MOUSE_DOWN,objectClick);
cone.addEventListener(MouseEvent3D.MOUSE_DOWN,objectClick);
cube.addEventListener(MouseEvent3D.MOUSE_DOWN,objectClick);
}

private function onEnterFrame(e:Event):void{
if(!cover.visible){
if(keyIsDown){
// if the key is still pressed, just keep on moving
switch(lastKey){
case 87: cam.targettiltangle -= 10; break;
case 83: cam.targettiltangle += 10; break;
case 65: cam.targetpanangle -= 10; break;
case 68: cam.targetpanangle += 10; break;
}
}
cam.hover();
View.render();
}
}

private function keyDown(e:KeyboardEvent):void{
lastKey = e.keyCode;
keyIsDown = true;
}

private function keyUp(e:KeyboardEvent):void{
keyIsDown = false;
}

private function objectClick(e:MouseEvent3D):void{
var obj:Object3D = e.target as Object3D;
cam.target = obj;
}

}
}


2、 Cover.as


package{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.text.TextField;
import flash.text.TextFormat;

public class Cover extends Sprite{
private var parentMovie:Sprite;
private var coverSquare:Sprite;
private var coverText:TextField;
private var text:String;
private var blurredParent:Bitmap;

private var stageW:Number;
private var stageH:Number;

public function Cover(parent:Sprite,w:Number = 465, h:Number = 400, txt:String = null){
parentMovie = parent;
stageW = w;
stageH = h;
text = txt;
super();
coverSquare = new Sprite();
coverSquare.graphics.beginFill(0x000000,0.05);
coverSquare.graphics.drawRect(0,0,parentMovie.stage.stageWidth,parentMovie.stage.stageHeight);
coverSquare.graphics.endFill();
addChild(coverSquare);
var format1:TextFormat = new TextFormat();
format1.color = 0x000000;
format1.size = 12;
format1.align = "center";
format1.font = "_sans";
coverText = new TextField();
if(!text){
coverText.text = "Roll over to view";
} else {
coverText.text = text;
}
coverText.setTextFormat(format1);
coverText.width = parentMovie.stage.stageWidth;
blurredParent = new Bitmap();
this.addChild(blurredParent);
parentMovie.stage.addEventListener(Event.MOUSE_LEAVE,showCover);
parentMovie.stage.addEventListener(MouseEvent.MOUSE_OVER,hideCover);
this.addEventListener(Event.ENTER_FRAME,initCover);
showCover();
}

private function hideCover(e:MouseEvent):void{
trace("hideCover "+e.stageX);
if(e.stageX < stageW && e.stageX > 0 && e.stageY < stageH && e.stageY > 0){
this.visible = false;
}
}

private function showCover(e:Event = null):void{
if(!this.visible){
refresh();
}
this.visible = true;
}

private function initCover(e:Event):void{
this.removeEventListener(Event.ENTER_FRAME,initCover);
refresh();
this.visible = true;
}

public function refresh():void{
var bits:BitmapData = new BitmapData(stageW,stageH);
bits.draw(coverSquare);
bits.draw(parentMovie);
var backgroundImage:Bitmap = new Bitmap(bits);
backgroundImage.filters = new Array( new BlurFilter(6,6,4) );
var textOverlay:BitmapData = new BitmapData(stageW,stageW,false);
textOverlay.draw(backgroundImage);
textOverlay.draw(coverText,null,null,null,null,true);
blurredParent.bitmapData = textOverlay;
}

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值