package
{
import away3d.cameras.Camera3D;
import away3d.containers.ObjectContainer3D;
import away3d.containers.View3D;
import away3d.events.MouseEvent3D;
import away3d.materials.BitmapMaterial;
import away3d.materials.ColorMaterial;
import away3d.primitives.Plane;
import com.as3dmod.modifiers.Bend;
import com.as3dmod.ModifierStack;
import com.as3dmod.plugins.away3d.LibraryAway3d;
import com.greensock.TweenLite;
import com.greensock.easing.*
import flash.display.BitmapData;
import flash.display.MovieClip;
import flash.display.Shape;
import flash.events.Event;
import flash.filters.DropShadowFilter;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.geom.Transform;
/**
* ...
* @author iChow http://www.shootarea.com/iChow/blog
*/
[SWF(width="600",height="500")]
public class Main extends MovieClip
{
private var camera:Camera3D;
private var view:View3D;
private var plane:Plane;
private var modifier:ModifierStack;
private var isClick:Boolean;
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);
//
var _shape:Shape = new Shape();
_shape.graphics.beginFill(0x8EC3C9);
_shape.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
_shape.graphics.endFill();
addChild(_shape);
create3D();
createObject();
}
private function create3D():void
{
camera = new Camera3D();
camera.z = -1000;
view = new View3D( { x:stage.stageWidth/2, y:stage.stageHeight/2 } );
view.camera = camera
addChild(view);
addEventListener(Event.EXIT_FRAME, onEnterRender);
}
private function onEnterRender(e:Event):void
{
if (isClick) {
modifier.apply();
}else {
var mX:Number = stage.mouseX > 0 ? stage.mouseX : 0;
var mY: Number = stage.mouseY > 0 ? stage.mouseY : 0;
var tarX:Number = 1.5*(mX - stage.stageWidth/2);
var tarY:Number = 6*(mY - stage.stageHeight/2);
var dX:Number = camera.x - tarX;
var dY:Number = camera.y - tarY;
camera.x -= dX*.1;
camera.y = dY * .1;
camera.lookAt(plane.position);
}
view.render();
}
private function createObject():void {
plane = new Plane();
plane.width = 400;
plane.height = 300;
plane.rotationX = 90;
plane.ownCanvas = true;
plane.useHandCursor = true;
plane.material = new ColorMaterial(0x666666);
plane.filters = [new DropShadowFilter(4, 90, 0, .5, 4, 4, .5)];
view.scene.addChild(plane);
plane.addOnMouseDown(planeMouseDown);
}
private function planeMouseDown(e:MouseEvent3D):void
{
plane.removeOnMouseDown(planeMouseDown);
//
isClick = true;
var tearplanes:ObjectContainer3D = new ObjectContainer3D();
tearplanes.name = "tearplanes";
view.scene.addChild(tearplanes);
var bmpData:BitmapData = new BitmapData(stage.stageWidth, stage.stageHeight,false);
bmpData.draw(this);
var _plane:Plane = new Plane({segmentsW:10, segmentsH:10,width:stage.stageWidth,height:stage.stageHeight,rotationX:90});
_plane.material = new BitmapMaterial(bmpData, { smooth:true } );
_plane.ownCanvas = _plane.bothsides = true;
tearplanes.addChild(_plane);
var bend:Bend = new Bend();
bend.offset = 1;
bend.angle = 182;
TweenLite.to(bend, 1.5, { force:1,ease:Quad.easeInOut} );
TweenLite.to(_plane, 2, { y: -600, ease:Quad.easeInOut, delay:.05 } );
modifier = new ModifierStack(new LibraryAway3d(), _plane);
modifier.addModifier(bend);
camera = new Camera3D( { x:0, y:0, z: -900 } );
view.camera = camera;
plane.alpha = 0;
var __shape:Shape = getChildAt(0) as Shape;
__shape.graphics.beginFill(0xFFFFFF * Math.random(), 1);
__shape.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
__shape.graphics.endFill();
TweenLite.delayedCall(1.8,clearEffect);
}
private function clearEffect():void
{
var _planes:ObjectContainer3D = view.scene.getChildByName("tearplanes") as ObjectContainer3D;
while(_planes.children.length) _planes.removeChild(_planes.children[0]);
view.scene.removeChild(_planes);
modifier.clear();
modifier = null;
TweenLite.to(plane, .4, { alpha:1 } );
plane.addOnMouseDown(planeMouseDown);
isClick = false;
}
}
}
Demo
☑80后 ☑奔3 ☑没房 ☑没车 ☑没钱 ☑没相貌 ☑没身材 ☑没口才 ☑没成绩 ☑没身份 ☑没背景 ☑没老婆 ☑没死
浙公网安备 33010602011771号