je redonne la source dans le code...
1/ code de base de generation de l'environnement et création des blocs (superblocs)
Action Script
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.events.*;
import caurina.transitions.Tweener;
public class Main extends Sprite
{
private var mouseSurface:surface;
private var viewport:Viewport3D;
private var scene:Scene3D;
private var camera:Camera3D;
private var renderer:BasicRenderEngine;
private var blocNum:Number;
private var xpos:Number;
private var ypos:Number;
private var superBlocArray:Array;
public function Main()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
init();
}
private function init():void
{
initPapervision();
initMaterials();
initListener();
}
//-------------------------CREATION DE LA SCENE
private function initPapervision():void
{
viewport = new Viewport3D(stage.stageWidth,stage.stageHeight,false,true);
addChild( viewport );
scene = new Scene3D();
camera = new Camera3D;
camera.z = -200;
renderer = new BasicRenderEngine;
}
//-------------------------CONSTRUCTION DES BLOCS
private function initMaterials():void
{
blocNum = 20;
superBlocArray = new Array ();
for (var i:Number = 0 ; i<blocNum; i++)
{
var plane:superBloc = new superBloc(scene, i);
plane.addTo();
superBlocArray.push(plane)
plane.plane.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,plane.onOver);
}
camera.target= superBlocArray[0].plane;
}
//-------------------------mISE EN PLACE DE L ECOUTEUR
private function initListener():void
{
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
//-------------------------aNNIMATION
private function onEnterFrame (e:Event):void
{
convertNum()
Tweener.addTween(camera, {x:xpos/10, y:ypos/10, z:-200, rotationX:camera.rotationX, rotationY:camera.rotationY , rotationZ:camera.rotationZ, time:1, transition:"easeout"})
renderer.renderScene ( scene, camera, viewport );
}
//-------------------------FONCTION POUR VERIFIER LA POSITION DE LA SOURIS
private function convertNum()
{
if (mouseX < (stage.stageWidth/2))
{
xpos = -((stage.stageWidth/2)-mouseX);
}
else
{
xpos = mouseX -(stage.stageWidth/2);
};
if (mouseY < (stage.stageHeight/2))
{
ypos = (stage.stageHeight/2)-mouseY;
}
else
{
ypos = -(mouseY-(stage.stageHeight/2));
};
}
}
}
2 / Ma classe superbloc qui représente chaque bloc créé dans l'environnement 3d :
Action Script
package
{
import flash.display.Sprite;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;
import org.papervision3d.events.*;
import caurina.transitions.Tweener;
public class superBloc
{
public var plane:Plane;
private var material:MovieAssetMaterial;
var scene:Scene3D;
var i:Number;
function superBloc (scene:Scene3D, i:Number)
{
this.scene = scene;
this.i = i;
init ()
initObjects ()
}
function init ()
{
var numFace:Number = Math.floor(Math.random()*9+1)
material = new MovieAssetMaterial("bloc", true, true)//(myClip);
material.doubleSided = false;
material.interactive = true;
material.smooth = true
}
function initObjects()
{
plane = new Plane( material, 100, 50, 2, 2 );
plane.z = 10000 + i;
plane.y = Math.floor(Math.random()*100+1);
plane.x = Math.floor(Math.random()*500+1);
moveObjectsToFront();
trace(MovieMaterial(plane.material).movie)
}
//-------------------------FONCTION DE POSITIONNEMENT DE LA PLAQUE
function moveObjectsToFront()
{
var calcul:Number = (Math.round(i/ 2)-(i/ 2));
if(calcul == 0)
{
Tweener.addTween(plane, {x:-(Math.floor(Math.random()*10)-(i*40)), y:-Math.floor(Math.random()*50+1), z:50*i+1, rotationX:plane.rotationX, rotationY:plane.rotationY , rotationZ:plane.rotationZ,delay:0.3*i, time:2, transition:"easeinoutexpo"})
}
else
{
Tweener.addTween(plane, {x:Math.floor(Math.random()*10)-(i*40), y:-Math.floor(Math.random()*50+1), z:50*i+1, rotationX:plane.rotationX, rotationY:plane.rotationY , rotationZ:plane.rotationZ,delay:0.3*i, time:2, transition:"easeinoutexpo"})
}
}
public function addTo()
{
scene.addChild(plane);
plane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER,onOver);
}
public function onOver (e:InteractiveScene3DEvent):void
{
//trace(MovieMaterial(plane.material).movie)
Tweener.addTween(MovieMaterial(plane.material).movie, {alpha:0.5, time:2, transition:"easeinoutexpo"});
}
public function removeTo()
{
scene.removeChild(plane);
}
}
}