Galerie papervision

cs_bretagne22 Messages postés 12 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 10 mars 2011 - 20 nov. 2008 à 11:26
lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 - 24 nov. 2008 à 17:44
Je viens de réaliser une galerie d'images avec PV3D et AS3.
Tout fonctionne bien sauf...
Je n'arrive pas à rendre mes plane interactives. Je voudrais que lorsque l'on clique sur une image, on atteigne une url. Mais quoi que je fasse, je n'arrive pas à appliquer le click event sur ma plane mais seulement sur le container...
Merci pour votre aide.
Voici mon script :

import flash.events.IMEEvent;
import org.papervision3d.scenes.*;
import org.papervision3d.cameras.*;
import org.papervision3d.objects.*;
import org.papervision3d.materials.*;
import org.papervision3d.events.*;
import flash.net.URLLoader;
import flash.display.Loader ;
import flash.net.URLRequest;
import org.papervision3d.core.utils.virtualmouse.VirtualMouse;
import org.papervision3d.core.utils.virtualmouse.VirtualMouseMouseEvent
import flash.events.MouseEvent;
import flash.display.Sprite;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.events.InteractiveScene3DEvent;
import org.papervision3d.objects.primitives.Plane;

var container:Sprite = new Sprite();
container.x = stage.stageWidth * 0.5;
container.y = stage.stageHeight * 0.5;
addChild(container);

var scene:Scene3D = new Scene3D(container);
var camera:Camera3D = new Camera3D();
camera.zoom = 6;

var mat1:BitmapAssetMaterial = new BitmapAssetMaterial("groupefacilasol.jpg");
mat1.smooth = true;
mat1.oneSide = false;

var mat2:BitmapAssetMaterial = new BitmapAssetMaterial("panneaux.jpg");
mat2.smooth = true;
mat2.oneSide = false;

var mat3:BitmapAssetMaterial = new BitmapAssetMaterial("photovoltaique.jpg");
mat3.smooth = true;
mat3.oneSide = false;

var mat4:BitmapAssetMaterial = new BitmapAssetMaterial("Agriculteurs.jpg");
mat4.smooth = true;
mat4.oneSide = false;

var mat5:BitmapAssetMaterial = new BitmapAssetMaterial("investisseurs.jpg");
mat5.smooth = true;
mat5.oneSide = false;

var mat6:BitmapAssetMaterial = new BitmapAssetMaterial("Particuliers.jpg");
mat5.smooth = true;
mat6.oneSide = false;

var mat7:BitmapAssetMaterial = new BitmapAssetMaterial("pvfix.jpg");
mat7.smooth = true;
mat7.oneSide = false;

var mat8:BitmapAssetMaterial = new BitmapAssetMaterial("rachat.jpg");
mat8.smooth = true;
mat8.oneSide = false;

var mat9:BitmapAssetMaterial = new BitmapAssetMaterial("sma.jpg");
mat9.smooth = true;
mat9.oneSide = false;

var photo1:Plane = new Plane(mat1, 250, 250,9,9);
scene.addChild(photo1);
photo1.x =-300;
photo1.y =150;
photo1.z =-150;

addEventListener(MouseEvent.CLICK, photo1Click);

function photo1Click(e:MouseEvent):void
{

    navigateToURL(new URLRequest("http://www.youtube.com"));
}

var photo2:Plane = new Plane(mat2, 250, 250,9,9);
scene.addChild(photo2);
photo2.x =0;
photo2.y =150;
photo2.z =-150;

var photo3:Plane = new Plane(mat3, 250, 250,9,9);
scene.addChild(photo3);
photo3.x = 300;
photo3.y = 150;
photo3.z =-150;

var photo4:Plane = new Plane(mat4, 250, 250,9,9);
scene.addChild(photo4);
photo4.x =-300;
photo4.y =-150;
photo4.z =-150;

var photo5:Plane = new Plane(mat5, 250, 250,9,9);
scene.addChild(photo5);
photo5.x =0;
photo5.y =-150;
photo5.z =-150;

var photo6:Plane = new Plane(mat6, 250, 250,9,9);
scene.addChild(photo6);
photo6.x = 300;
photo6.y =-150;
photo6.z =-150;

var photo7:Plane = new Plane(mat7, 250, 250,9,9);
scene.addChild(photo7);
photo7.x =-300;
photo7.y =-450;
photo7.z =-150;

var photo8:Plane = new Plane(mat8, 250, 250,9,9);
scene.addChild(photo8);
photo8.x =0;
photo8.y =-450;
photo8.z =-150;

var photo9:Plane = new Plane(mat9, 250, 250,9,9);
scene.addChild(photo9);
photo9.x = 300;
photo9.y = -450;
photo9.z =-150;

addEventListener(Event.ENTER_FRAME, render);

function render(e:Event):void
{
  camera.x += (((stage.mouseX-(stage.stageWidth * .5))*2)-camera.x )*.05;
  camera.y += (((stage.mouseY-(stage.stageHeight*.5))*2)-camera.y )*.05;
  scene.renderCamera(camera);
}

8 réponses

lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 2
20 nov. 2008 à 14:37
Salut !

J'averti dessuite, je n'ai encore jamais fait de papervision, donc mes conseils seront peut-être à côté de la plaque. Cependant, tu met un écouteur sur ton this, donc tu ne pourras pas récupérer le clic sur l'un des objets. Avec :
addEventListener(MouseEvent.CLICK, photo1Click);

Tu fixe un écouteur sur la scène principal, donc forcément tu verras pas la différence. En cherchant un peu j'ai trouvé ça :
containeur.getChildByName("mat1").addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, photo1Click);
Je pense que tu peux essayer d'échanger ces deux lignes pour voir le résultat.

Bon Courage
Lural
0
cs_bretagne22 Messages postés 12 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 10 mars 2011
20 nov. 2008 à 14:41
Merci d'avoir répondu si vite.
Je vais essayer et je te dit quoi.
0
cs_bretagne22 Messages postés 12 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 10 mars 2011
20 nov. 2008 à 14:58
Bon ben ça marche pas... dommage.
Pas d'autre idée ?
0
lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 2
20 nov. 2008 à 16:24
Si tu nous donne les codes d'erreurs, ce sera plus facile ^^
Je ne connais pas ton niveau en AS, donc essaye toujours :
mat1.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, photo1Click);
juste après avoir créer mat1 ;)

Bon Courage
Lural
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 2
20 nov. 2008 à 18:46
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
20 nov. 2008 à 19:18
Pareil que lural : j'ai pas touché à papervision ... par contre, je suis en plein CS4. Et je peux te dire que tout papervision est implémenté dans cette version d'office.

Peg'
0
cs_bretagne22 Messages postés 12 Date d'inscription mardi 19 février 2008 Statut Membre Dernière intervention 10 mars 2011
24 nov. 2008 à 09:53
Salut et encore merci pour votre aide.
Trois choses : 1- je suis plutôt novice en as3... Je commence à comprendre qlq trucs mais il reste encore pas mal de brouillard...
2-Je n'utilise pas la version 2,0 de papervision mais la version 1,5 et je n'ai pas non plus fait de classe mère. Je code directement dans mon fichier fla.
3- J'ai essayé ton dernier conseil Lural : mat1.addEventListener(InteractiveScene3DEvent.OBJECT_PRESS, mat1Click);

juste après avoir créer mat1 mais ça marche toujours pas. Il n'y a aucun message d'erreur mais rien ne se passe quand on clique. J'ai essayé de déclarer : mat1. interactive = true; mais j'obtient le message d'erreur suivant : accès à la propriétée interactive peut-être non définie, via la référence de type static.
Ca vous parle, vous???
0
lural Messages postés 131 Date d'inscription samedi 6 janvier 2007 Statut Membre Dernière intervention 4 janvier 2011 2
24 nov. 2008 à 17:44
Salut

1 - Pas grave, tout le monde commence débutant.
2 - Aucune idée de la différence, je ne connais pas papervision...
3 - A première vu, ton erreur semble dire que le type BitmapAssetMaterial ne dispose pas forcément du champ interactive. Donc cette ligne semble inutile, ou est mal écrite. Apparemment, il y a quand même possibilité de mettre des listener, et InteractiveScene3DEvent.OBJECT_PRESS est reconnu ...
Tu peux toujours essayer
mat1.addEventListener(MouseEvent.Click, mat1Click);
comme on le ferait plus classiquement...
Sinon il va falloir que tu aille chercher des spec sur papervision et ses events

Bon Courage
Lural
0
Rejoignez-nous