Aide - Recherche - Membres - Calendrier
Version complète : Interactive Material, acceder a un mc dans le mc qui sert de material
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration 3D
auricom
Bonjour

Je vais chercher mon mc de la library que je addchild sur le stage (mcParent)
je fais un visible false sur ce mc

ensuite je cree un plane (meme largeur et hauteur que mon mcParent) auquel j ajoute un material via MovieMaterial(mcParent)
je fait par apres

material.interactive = true;

ensuite je cherche le moyen d acceder a un movieclip (mcChild) a l interieur du movieclip mcParent
pour lui associer un addEventListener

genre

material.movie.mcChild.addEventListener(MouseEvent.CLICK, doSomething)

mais ca ne fonctionne pas
est ce que quelqu un a une idee sur la methode?

Dois-je creer l interaction avant? genre apres avoir fait mon addchild de mcParent
Dois-je faire aussi un addchild de mcChild dans mcParent (pour l instant mon mcChild est place directement dans mon mcParent)?

??

D'avance un grand merci
L°TH
yo pas besoin d'ajouter ton clip au root

Action Script


var maTexture:MovieClip=new BIDUL()//ta classe dans la bibliothèque
maTexture.mouseEnabled=false //pour éviter les actions non définie
var TEX:MovieMaterial= new MovieMaterial(maTexture,true,true);

//voila c'est tout y a plus qu'a lancer tes actions directement par le MovieClip
maTexture.monBouton.addEventListener ('click',ACTION);
auricom
Salut L°TH

Est ce que tu utilises pv3d 2.0 ?

De mon cote ca ne fonctionne pas

je fais ceci

Action Script


var clTex:Class = getDefinitionByName("linkageNameDeMCQuiSertDeTexture") as Class;
var mc = new clText();
mc.name = "mc";
mc.visible = false; //------------------ ca me permet d avoir mon mc sur le stage car dedans j ai des champs textes dynamiques,
// comme ca une fois que mes champs textes sont bien popules je peux me servir de mc comme texture et
// dans mc j ai deux autres mc qui me servent de boutons
mc.mouseEnabled=false
mcContainer.addChild(mc);//Container etant un movieclip que je met sur le stage de la meme facon sauf que lui est a visible true

//ensuite

viewport = new Viewport3D(1280, 1024, true, true);
mcSection.addChild(viewport);

renderer = new BasicRenderEngine();
scene = new Scene3D();
camera = new Camera3D();
camera.zoom = 11;
camera.focus = 100;

//Cree la texture
var mat:MovieMaterial = new MovieMaterial(mc);//maintenant mat = une texture avec des champs textes dedans
mat.animated = true;
mat.interactive = true;


//Cree un objet pour placer le plane
var _obj:Object = new Object();
_obj.x = 0
_obj.y = 0
_obj.z = 0;

_obj.rotationX = 0;
_obj.rotationY = 0;
_obj.rotationZ = 0;


var ob3dContainer = new DisplayObject3D();
var p:Plane = new Plane(mat, mc.width, mc.height, 1, 1, _obj); //pour que le plane est la meme dimension
// que mon movieclip (celui qui est a visible false)


//maintenant si je fais
p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, unTraceQuiDitClick); // quand je clic ca fonctionne bien mais c est sur l ensemble du plane

//et quand je fais
mc.mcBouton.addEventListener(MouseEvent.CLICK, unTraceQuiDitClick); //rien du tout

//et j ai meme essaye
var _material:MovieMaterial = p.material as MovieMaterial;
_material.interactive = true;
_material.animated = true;
var _mc:MovieClip = _material.movie as MovieClip; //je reccupere la texture de mon plane en tant que movieclip
_mc.mcBouton.alpha = 0.2 //ca fontionne bien
_mc.mcBouton.addEventListener(MouseEvent.CLICK, unTraceQuiDitClick);//rien du tout



ob3dContainer.addChild(p);
scene.addChild(ob3dContainer);
renderer.renderScene(scene, camera, viewport);



As tu une idee?
L°TH
mc.visible = false;
et inutile tu peu garder la référence de ton movieClip sans le rajouté addChild()

sinon je pense que tu n'a pas désactiver tout tes objets
p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, unTraceQuiDitClick);
et cette fonction interfère avec l'action sur movieClip
auricom
je suis oblige de le mettre sur le stage si je veux setter mes champs textes dynamique
et pour le p.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, unTraceQuiDitClick);
c est si je l active sous entendu je commente l autre addEventListener(MouseEvent.CLICK,
L°TH
essaye ça j'utilise la dernier rev
pour un champs de texte editable utilise le composant TextImput
avec un boucle pour le rendu

Action Script

//Papervision 3D\\________________
import org.papervision3d.Papervision3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.*;
import org.papervision3d.view.*;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.materials.*;
import org.papervision3d.events.*;

import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.objects.primitives.*;
import org.papervision3d.materials.*;

var mc = new clText();
mc.mouseEnabled=false;

var viewport:Viewport3D = new Viewport3D(1280, 1024, true, true);
addChild(viewport);

var renderer:BasicRenderEngine = new BasicRenderEngine();
var scene:Scene3D = new Scene3D();
var camera:Camera3D = new Camera3D();
camera.zoom = 11;
camera.focus = 100;

//Cree la texture
var mat:MovieMaterial = new MovieMaterial(mc);
mat.animated = true;
mat.interactive = true;

var _obj:Object = new Object();
_obj.x = 0
_obj.y = 0
_obj.z = 0;

_obj.rotationX = -45;
_obj.rotationY = 20;
_obj.rotationZ = 5;

var ob3dContainer = new DisplayObject3D();
var p:Plane = new Plane(mat, mc.width, mc.height, 4, 6, _obj);

mc.mcBouton.addEventListener('click', c1);
mc.mcBouton.addEventListener('mouseOver',c2);
mc.mcBouton.addEventListener('mouseOut',c3);

scene.addChild(ob3dContainer);
ob3dContainer.addChild(p);
renderer.renderScene(scene, camera, viewport);

function c1(e){ST.text="CLICK"}
function c2(e){ST.text="OVER"}
function c3(e){ST.text="OUT"}//pas besoin de rendu

mc.txt.text="exemple de texte"//pour controler le texte sur mc
renderer.renderScene(scene, camera, viewport);//besoin d'effectuer un rendu

auricom
Je suis bluffé
je pensais avoir fait la meme chose.
J ai repris ton code dans le meme ordre et ca marche nickel

Je comprends toujours pas ce qui allait pas, mais bon maintenant ca click bien dans le bouton
En passant, tu utilises quoi toi comme tweener pour great white 2.0 ??
auricom
parce que si j utilise

TweenLite.to(mc, 2, { x:100 } ); // ca fontionne bien
//mais quand je fais
TweenLite.to(ob3dContainer, 2, { x:100 } );//rien ne se passe

j ai place ce code juste avant

renderer.renderScene(scene, camera, viewport);

on peut faire des tweens sur des dislayObject3D ?
L°TH
bien sur j'utilise tweener
http://tweener.googlecode.com/svn/trunk/as3/

Action Script


function RUN(e=null):void { renderer.renderScene(scene, camera, viewport)}

Tweener.addTween( camera, { y:200, zoom:8, focus:120, time:1, delay:.5, transition:"linear", onUpdate:RUN, onComplete:FIN});
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.