Bonjour,
Et bien en faite j'ai utiliser un plane3D comme pour le tuto de Movie Material Interactivity (http://www.flashsandy.org/tutorials/3.0/sandy_cs3_tut19);
je vous passe le code :
Action Script
package {
//Import flash
import flash.display.*;
import flash.net.URLRequest;
import flash.events.*;
import flash.ui.*;
import flash.filters.GlowFilter;
import flash.net.*;
//Import Sandy
import sandy.core.Scene3D;
import sandy.core.data.*;
import sandy.core.scenegraph.*;
import sandy.materials.*;
import sandy.materials.attributes.*;
import sandy.primitive.*;
import sandy.util.*;
import sandy.events.*;
import sandy.parser.*;
public class SiteWeb extends Sprite {
//varriables privées
private var scene:Scene3D;
private var camera:Camera3D;
private var queue:LoaderQueue;
//Varriables privées pour les modeles 3D
private var tg:TransformGroup;
private var car:Shape3D;
private var wheelLF:Shape3D;
private var wheelRF:Shape3D;
private var wheelLR:Shape3D;
private var wheelRR:Shape3D;
private var parserStack:ParserStack;
//Creation de mon Sprite 2D
var plane:Plane3D = new Plane3D( "thePlane" );
public function SiteWeb():void {
//Chargement de fichiers extérieurs
/*queue = new LoaderQueue();
queue.add( "test", new URLRequest("Untitled-1.swf") );
queue.add( "test2", new URLRequest("Untitled-1.swf") );
queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete );
queue.start();
*/
var parser:IParser = Parser.create("assets/models/ASE/car.ASE",Parser.ASE );
var parserLF:IParser = Parser.create("assets/models/ASE/wheel_Front_L.ASE",Parser.ASE );
var parserRF:IParser = Parser.create("assets/models/ASE/wheel_Front_R.ASE",Parser.ASE );
var parserLR:IParser = Parser.create("assets/models/ASE/wheel_Rear_L.ASE",Parser.ASE );
var parserRR:IParser = Parser.create("assets/models/ASE/wheel_Rear_R.ASE",Parser.ASE );
parserStack = new ParserStack();
parserStack.add("carParser",parser);
parserStack.add("wheelLFParser",parserLF);
parserStack.add("wheelRFParser",parserRF);
parserStack.add("wheelLRParser",parserLR);
parserStack.add("wheelRRParser",parserRR);
parserStack.addEventListener(ParserStack.COMPLETE, parserComplete );
parserStack.start();
}
private function parserComplete(pEvt:Event ):void {
car = parserStack.getGroupByName("carParser").children[0] as Shape3D;
wheelLF = parserStack.getGroupByName("wheelLFParser").children[0] as Shape3D;
wheelRF = parserStack.getGroupByName("wheelRFParser").children[0] as Shape3D;
wheelLR = parserStack.getGroupByName("wheelLRParser").children[0] as Shape3D;
wheelRR = parserStack.getGroupByName("wheelRRParser").children[0] as Shape3D;
loadSkins();
}
private function loadSkins() {
queue = new LoaderQueue();
queue.add( "carSkin", new URLRequest("assets/textures/car.jpg") );
queue.add( "wheels", new URLRequest("assets/textures/wheel.jpg") );
queue.add( "ciel", new URLRequest("skyboxAssets/ciel.jpg") );
//Chargement de mon fichier swf pour le Sprite 2D
queue.add( "video", new URLRequest("videos/vaiseau.swf") );
queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete );
queue.start();
}
public function loadComplete(event:QueueEvent ):void {
// Creation de la camera
camera = new Camera3D( 800, 600 );
camera.z = -300;
//Creation de la racine de larbre qui va contenir les objets visibles
var root:Group = createScene();
//Creation de la scene et ajout de la cmera et de l'arbre ds objets
scene = new Scene3D( "scene", this, camera, root );
// Listen to the heart beat and render the scene
addEventListener( Event.ENTER_FRAME, enterFrameHandler );
}
// Creation du graphique de la scene allant à la racine
private function createScene():Group {
var g:Group = new Group();
//Creation de la SkyBox
var mySkyBox:SkyBox = new SkyBox( "game_sky", 3000, 6, 6 );
//Lien des textures avec la skybox (apparence)
mySkyBox.front.appearance = new Appearance( new BitmapMaterial( queue.data["ciel"].bitmapData ) );
mySkyBox.back.appearance = new Appearance( new BitmapMaterial( queue.data["ciel"].bitmapData ) );
mySkyBox.left.appearance = new Appearance( new BitmapMaterial( queue.data["ciel"].bitmapData ) );
mySkyBox.right.appearance = new Appearance( new BitmapMaterial( queue.data["ciel"].bitmapData ) );
mySkyBox.top.appearance = new Appearance( new BitmapMaterial( queue.data["ciel"].bitmapData ) );
mySkyBox.bottom.remove();// Suppression des faces non utilisée*/
//log.appendText( "\n... SkyBox créées" );
//Lien de la Skybox a mon group pour l'afficher
g.addChild( mySkyBox );
tg = new TransformGroup('myGroup');
var material:BitmapMaterial = new BitmapMaterial( queue.data["carSkin"].bitmapData );
var app:Appearance = new Appearance( material );
car.appearance = app;
var materialW:BitmapMaterial = new BitmapMaterial( queue.data["wheels"].bitmapData );
var appW:Appearance = new Appearance( materialW );
wheelLF.appearance = appW;
wheelRF.appearance = appW;
wheelLR.appearance = appW;
wheelRR.appearance = appW;
/*car.useSingleContainer = false;
wheelLF.useSingleContainer = false;
wheelRF.useSingleContainer = false;
wheelLR.useSingleContainer = false;
wheelRR.useSingleContainer = false;
*/
//Interaction avec les objets 3D
car.enableBackFaceCulling = false;
car.container.buttonMode = true;
wheelLF.container.buttonMode = true;
wheelRF.container.buttonMode = true;
wheelLR.container.buttonMode = true;
wheelRR.container.buttonMode = true;
car.container.addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
car.container.addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
wheelLF.container.addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
wheelRF.container.addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
wheelLR.container.addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
wheelRR.container.addEventListener( MouseEvent.MOUSE_OVER, mouseOverHandler );
wheelLF.container.addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
wheelRF.container.addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
wheelLR.container.addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
wheelRR.container.addEventListener( MouseEvent.MOUSE_OUT, mouseOutHandler );
car.container.addEventListener(MouseEvent.CLICK,clickHandy);
wheelRR.container.addEventListener( MouseEvent.CLICK, gotoAuthorPage );
tg.addChild( wheelLF );
tg.addChild( wheelRF );
tg.addChild( wheelLR );
tg.addChild( wheelRR );
tg.addChild( car );
tg.rotateY = -130;
g.addChild( tg );
return g;
}
function mouseOverHandler( event:MouseEvent ):void {
var container:Sprite = event.target as Sprite;
container.filters = [
new GlowFilter( 0xffffff, 1, 30, 30 )
];
// -- get the Shape3D this container is in
var currentShape:Shape3D = getShape3DByContainer( container );
}
function getShape3DByContainer( container:Sprite ):Shape3D {
for each (var shape:Object in scene.root.children) {
if ( shape is Shape3D && shape.container == container ) {
return shape as Shape3D;
}
}
return null;
}
function mouseOutHandler( event:MouseEvent ):void {
var container:Sprite = event.target as Sprite;
container.filters = [];
// -- get the Shape3D this container is in
var currentShape:Shape3D = getShape3DByContainer( container );
}
//S'il clique sur handy
function clickHandy(event:MouseEvent):void {
scene.root.addChild(createPlaneVideo());
}
//Creation du panneau soit le Sprite 2D
function createPlaneVideo():Group {
// Create the root Group
var g:Group = new Group("myGroup");
plane.z = -100;
/////////////////////////////Test de mo Sprite2D\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//Test avec movieclip
var materialVideo:MovieMaterial = new MovieMaterial( queue.data["video"]);
materialVideo.lightingEnable = true;
var appVideo:Appearance = new Appearance( materialVideo );
//Test avec couleur
var materialAttr2:MaterialAttributes = new MaterialAttributes( new LineAttributes( 0.5, 0x2111BB, 0.4 ),
new LightAttributes( true, 0.1));
var materialcoul:Material = new ColorMaterial( 0xFFCC33, 1, materialAttr2 );
materialcoul.lightingEnable = true;
var appcoul:Appearance = new Appearance( materialcoul );
//Test avec bitmap
var materialBit:BitmapMaterial = new BitmapMaterial( queue.data["carSkin"].bitmapData );
var appBit:Appearance = new Appearance( materialBit );
plane.appearance = appVideo;
plane.enableInteractivity = true;
g.addChild(plane);
//plane.container.buttonMode = true;
//plane.container.addEventListener(MouseEvent.CLICK,SupHandler);
car.remove();
return g;
}
function SupHandler(event:MouseEvent):void {
plane.remove();
}
function gotoAuthorPage(event:MouseEvent):void {
var targetURL:URLRequest = new URLRequest("site.html");
navigateToURL(targetURL);
}
private function enterFrameHandler( event : Event ):void {
// test de la sky
//camera.pan+=5;
scene.render();
}
}
}
je crée ma varriable de plane au début et je lui fait faire dans la fonction function createPlaneVideo():Group quand je test avec une couleur ou un bitmap ca fonction mais dès que je met le swf qui a un bouton le bouton disparait.
J'ai tester de modifier ma plane 3D en Sprite mais alors là c'est pir y a rien qui s'affiche
je vous passe une image de ce que ca fait (si ca passe)