Title: InteractivePlanesBoard
Board of interactive planes - click on a plane - revision 856 - icon from DryIcons
Actionscript:
-
/**
-
* v0.1 code by dehash.com 2008
-
* Released as open source under the BSD License
-
* http://www.opensource.org/licenses/bsd-license.php
-
*/
-
package com.dehash.pv3d.examples.interactivity {
-
//{{{ IMPORTS
-
import flash.filters.DropShadowFilter;
-
import org.papervision3d.objects.DisplayObject3D;
-
import org.papervision3d.objects.primitives.Plane;
-
import org.papervision3d.view.BasicView;
-
import org.papervision3d.materials.ColorMaterial;
-
import org.papervision3d.materials.BitmapMaterial;
-
import org.papervision3d.events.InteractiveScene3DEvent;
-
import flash.events.Event;
-
// http://code.google.com/p/tweener/
-
import caurina.transitions.Tweener;
-
[SWF(width="800", height="600", backgroundColor="0xFFFFFF")]
-
//}}}
-
public class InteractivePlanesBoard extends BasicView {
-
//{{{ VARS
-
private var holder:DisplayObject3D;
-
private var quality:uint = 2;
-
[Embed(source='assets/add.png')]
-
private var pic:Class;
-
private var planes:Array;
-
//}}}
-
public function InteractivePlanesBoard(viewportWidth:Number = 800, viewportHeight:Number = 600,
-
scaleToStage:Boolean=true, interactive:Boolean=true, cameraType:String="CAMERA3D"){
-
super(viewportWidth, viewportHeight, scaleToStage, interactive, cameraType);
-
//
-
planes = [];
-
viewport.buttonMode = true;
-
viewport.useHandCursor = true;
-
//
-
holder = new DisplayObject3D();
-
//var bg:Plane = new Plane(new ColorMaterial(0xCCCCCC), 600, 600, quality, quality);
-
//holder.addChild(bg);
-
var gap:Number = 120;
-
for (var i:int = 0; i <4;i++){
-
for (var j:int = 0; j <4; j++) {
-
var t:DisplayObject3D = makeTwoSidedDisplayObject();
-
t.x = (i * gap) - (1.5*gap);
-
t.y = (j * gap) - (1.5*gap);
-
holder.addChild(t);
-
}
-
}
-
scene.addChild(holder);
-
camera.target = holder;
-
holder.scale = 0;
-
Tweener.addTween(holder, { time:3, transition:'easeinoutback', scale: 3 } );
-
-
// switch a line of planes to use BitmapMaterial
-
var bitmapMaterial:BitmapMaterial = new BitmapMaterial(new pic().bitmapData);
-
bitmapMaterial.interactive = true;
-
bitmapMaterial.smooth = true;
-
bitmapMaterial.tiled = true;
-
planes[0].material = bitmapMaterial;
-
planes[5].material = bitmapMaterial;
-
planes[10].material = bitmapMaterial;
-
planes[15].material = bitmapMaterial;
-
-
this.startRendering();
-
}
-
//
-
private function makeTwoSidedDisplayObject():DisplayObject3D {
-
var do3d:DisplayObject3D = new DisplayObject3D();
-
do3d.useOwnContainer = true;
-
do3d.filters = [new DropShadowFilter()];
-
var p:Plane = makePlane();
-
var p2:Plane = makePlane();
-
p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
-
p2.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, planeClickedHandler, false, 0, true);
-
do3d.addChild(p);
-
do3d.addChild(p2);
-
p2.rotationY = 180;
-
p.z = 1;
-
planes.push(p);
-
return do3d;
-
}
-
//
-
private function makePlane():Plane {
-
var colorMaterial:ColorMaterial = new ColorMaterial(Math.random() * 0xffffff);
-
colorMaterial.interactive = true;
-
var p:Plane = new Plane(colorMaterial, 100, 100, quality, quality);
-
return p;
-
}
-
//
-
private function planeClickedHandler(e:InteractiveScene3DEvent):void {
-
if (!Tweener.isTweening(e.target.parent)){
-
var rot:Number = e.target.parent.rotationY + 180;
-
Tweener.addTween(e.target.parent, { time:2, transition:'easeinoutback', rotationY: rot } );
-
}
-
}
-
//
-
protected override function onRenderTick(event:Event = null):void {
-
var rotY: Number = (mouseY-(stage.stageHeight/2))/(stage.height/2)*(1200);
-
var rotX: Number = (mouseX-(stage.stageWidth/2))/(stage.width/2)*(-1200);
-
camera.x = camera.x + (rotX - camera.x) / 5;
-
camera.y = camera.y + (rotY - camera.y) / 5;
-
renderer.renderScene(scene, camera, viewport)
-
}
-
}
-
}