Aide - Recherche - Membres - Calendrier
Version complète : Shape3DEvent et ROLL_OUT
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration 3D > Sandy
myster ty
Bonjour,

Je n'arrive pas à utiliser l'évènement MouseEvent.ROLL_OUT ni MouseEvent.MOUSE_OUT avec Shape3DEvent, pourtant les autres marchent très bien...

Je pourrai passer par le conteneur de mes objets, mais j'ai déjà défini toutes les autres fonctions, ça en ferait 2 pas pareil, et surtout je ne serai pas comment retrouver l'objetBoite depuis son conteneur (car j'en ai besoin pour modifier sa texture).

Quelqu'un a-t-il une solution ? merci beaucoup d'avance icon_smile.gif
pierce
Salut ,
Heu là j'ai pas tout compris je doit être un peu fatigué lol, tu pourrai montrer ton code stp ?
myster ty
bien sûr, le voilà icon_smile.gif :

Action Script

/* fonction de création du bigCube */
public function creeBigCube(pWidth:Number, pHeight:Number, pDepth:Number):void
{
bigCube = new Box('grosse boite', pWidth, pHeight, pDepth, PrimitiveMode.TRI, 2);

/* texturage */
bigCube.getFace(Box.FACE_BACK).appearance = new Appearance(tabTextures[0]);
bigCube.getFace(Box.FACE_BOTTOM).appearance = new Appearance(tabTextures[0]);
bigCube.getFace(Box.FACE_FRONT).appearance = new Appearance(tabTextures[1]);
bigCube.getFace(Box.FACE_LEFT).appearance = new Appearance(tabTextures[0]);
bigCube.getFace(Box.FACE_RIGHT).appearance = new Appearance(tabTextures[0]);
bigCube.getFace(Box.FACE_TOP).appearance = new Appearance(tabTextures[0]);
bigCube.enableBackFaceCulling = false;

/* ajout de l'interactivité */
bigCube.container.buttonMode = true;
bigCube.enableEvents = true;
bigCube.addEventListener(MouseEvent.CLICK, clickHandler);
bigCube.addEventListener(MouseEvent.MOUSE_DOWN, downHandler);
bigCube.addEventListener(MouseEvent.MOUSE_UP, upHandler);
bigCube.addEventListener(MouseEvent.MOUSE_OUT, outHandler);

racine.addChild(bigCube);
}
/* fonctions d'interactivité qui marchent */
private function clickHandler(event:Shape3DEvent):void
{
var objet:Box = event.target as Box;
objet.container.dispatchEvent(new Event(OBJET_CLICK));
tween3D.ouvreBigCube(objet);
}
private function downHandler(event:Shape3DEvent):void
{
var objet:Box = event.target as Box;
objet.container.dispatchEvent(new Event(OBJET_DOWN));
objet.getFace(Box.FACE_FRONT).appearance = new Appearance(tabTextures[2]);
}
private function upHandler(event:Shape3DEvent):void
{
var objet:Box = event.target as Box;
objet.container.dispatchEvent(new Event(OBJET_UP));
objet.getFace(Box.FACE_FRONT).appearance = new Appearance(tabTextures[1]);
}

/************************************************************************/
/* fonction d'interactivité qui marche pas => aucun trace ne s'affiche. */
private function outHandler(event:Shape3DEvent):void
{
var objet:Box = event.target as Box;
objet.container.dispatchEvent(new Event(OBJET_OUT));
objet.getFace(Box.FACE_FRONT).appearance = new Appearance(tabTextures[1]);
trace('truc');
}


donc tout marche correctement, sauf ma fonction outHandler qui n'est jamais exécutée icon_confused.gif

donc comment faire pour que l'écouteur MouseEvent.ROLL_OUT soit pris en compte sur un élément Box ?
ou bien suis-je obligé de passer par le container de ma Box (qui lui prend en colmpte le ROLL_OUT), mais à ce moment là, comment récupérer l'objet Box qui lui est associé ?
kiroukou
Oui ceci est un problème connu à l'heure actuelle.

Un membre du forum anglais propose une approche: http://www.flashsandy.org/forum/viewtopic....=ROLL_OUT#p4512

Personnellement je n'ai pas encore eu le temps de me pencher sur ce soucis.
myster ty
j'ai poursuivi un peu mes recherche et j'ai trouvé la fonction "getShape3DbyContainer()" sur ce tutoriel... je vais voir si j'arrive à l'utiliser...
myster ty
ça marche ! icon_mrgreen.gif

en réutilisant la fonction de rozengain et un écouteur sur le conteneur, ça résoud le problème.

voici le code :

Action Script

private function outHandler(event:MouseEvent):void
{
var objet:Box = getShape3DByContainer(event.target as Sprite) as Box;
objet.container.dispatchEvent(new Event(OBJET_OUT));
objet.getFace(Box.FACE_FRONT).appearance = new Appearance(tabTextures[1]);
trace('truc');
}


private 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;
}


d'ailleur elle est super pratique, tu devrais l'inclure dans tes container pour faire "monContainer.getShape3D()" icon_wink.gif

reste quand même que le ROLL_OUT est une fonction qui manque vraiment...
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.