Aide - Recherche - Membres - Calendrier
Version complète : goToAndPlay dans un MovieAssetMaterial
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration 3D
klikissy
Salut à tous, alors voila je me lance sur la 3d et j'avoue que je suis au bord de la crise de nerf.

J'essaie de créer une interface de navigation sur des plaque 3D.
Jusqu'ici tout va bien, les problèmes arrivent lors de l'interaction sur les plaque :

Problème 1 : il m'est impossible de maitriser la lecture du clip dans ma plaque. (avant les goToAndPlay ça marchais bien...)

Problème 2 : a la modification de l'alpha d'une plaque (au survol de celle-ci), c'est toutes mes plaques qui changes!!!!!

Merci @ tous en tout cas gourou.gif gourou.gif (je laisse mon fichier avec..)
L°TH
ca depand de ce que tu utilise
avec papervision
MAT = new MovieAssetMaterial ( map,precise );

MAT.animated=true
MAT.interactive=true;
klikissy
aie, bin apparemment je passe les paramètres correctement :

Action Script


function init ()
{
var numFace:Number = Math.floor(Math.random()*9+1)
material = new MovieAssetMaterial("bloc", true, true)//(myClip);
material.updateBitmap();
material.doubleSided = false;
material.interactive = true;
}

(les sources sont avec...)
Apres je le cible correctement pour le tween (le tween alpha marche). Le truc c'est que au lieu de modifier un seul bloc, il baisse l'alpha de tous mes blocs.
En suite reste le probleme du gotoAndPlay du clip chargé dans la plaine qui ne marche pas du tout.

Merci en tout cas
klikissy
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);
}
}
}
L°TH
je pense que ça vient de plane.plane.addEventListener(...
de plus tous tes plans on le même nom

Action Script

  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"+i]= new superBloc(scene, i);
["plane"+i].addTo();
superBlocArray.push(["plane"+i])
["plane"+i].addEventListener(InteractiveScene3DEvent.OBJECT_PRESS,plane.onOver);

}
camera.target= superBlocArray[0].plane;
}

un truc comme ça icon_question.gif
L°TH
this["plane"+i] au lieu de ["plane"+i]
klikissy
Citation (L°TH @ Oct 6 2008, 02:04 PM) *
this["plane"+i] au lieu de ["plane"+i]

Merci de ton aide L°TH, mais en fait g trouvé d'ou cela vennais.
Pour info je publie le nouveau code (au cas ou cela aiderais quelqu'un) :

Action Script


// bloc est un clip placé dans la biblie, je le créé et c'est a lui que je demande le goto...
function init ()
{
myClip = new bloc()
var numFace:Number = Math.floor(Math.random()*9+1)
myClip.gotoAndStop(numFace)
material = new MovieMaterial(myClip, true, true);
material.doubleSided = false;
material.interactive = true;
}

Partie concernant l'alpha :

Action Script


Tweener.addTween(MovieMaterial(publicVar.superBlocArray[j].material).movie, {alpha:0.1, time:1});


Voila, en fait il faut garder la classe MovieMaterial et non MovieAssetMaterial !!!!
En suite on créée le clip
on agit dessus normalement
et on le donne a la plane (s'assurer que son alpha et son interactivité sont activés)...

Je reste dispo si d'autres rencontrent le pb (mess perso s'est plus rapide.)

MERCI!!!!
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.