Aide - Recherche - Membres - Calendrier
Version complète : Probleme avec movieMaterial
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration 3D > Sandy
pierce
Bonjour,
Je suis en train de travailler sur sandy, j'insère un objet ASE et je fais que celui-ci soit un bouton et quand l'on click dessus il apparaisse une plane 3D. Là tout va bien. icon_mrgreen.gif

Ensuite je fait une texture en movieClip pour cette plane3D, c'est un swf. Dans mon swf j'ai créer un bouton tout simple ( composant bouton) lui donnant une redirection sur le net.

C'est là qu'est le problème sur la plane je ne vois aucun bouton rien que dalla icon_eek.gif donc là je me dis est ce que c'est possible ça ou pas du tout ...et bien sur si oui vous pourriez m'aider sil vous plait? gourou.gif

PS :
J'avais testé aussi avec un vidéos dans mon swf et j'ai vu que si elle était trop lourde ça ne marchait pas non plus j'ai juste ?

PS2:
j'ai aussi oublier de dire que javais tester avec :

Action Script

plane.enableInteractivity = true;

mais ca ne change rien icon_rolleyes.gif
myster ty
Bonjour,

J'ai fait un peu la même chose récemment mais avec des objets Sprite2D et ça marchait...
Je pense qu'avec Sprite3D ça doit marcher aussi, et ils se comporteraient comme des plane3D non ? icon_neutral.gif

enfin, moi je découvre encore, donc prend juste ça comme une idée icon_idea.gif
kiroukou

Action Script

1. plane.enableInteractivity = true;


Hum c'est pourtant la chose à faire.

Quand tu dis que cela ne fonctionne pas, tu veux dire que l'intéractivité avec les boutons ne se fait pas? Quel type d'interactions prévoies tu? (tu as quel repere visuel pour savoir s'il s'est bien passé une interaction?)
pierce
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 icon_evil.gif

je vous passe une image de ce que ca fait (si ca passe)
pierce
bon je retente :

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();
}
}
}
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.