Bonjour à tous,

Je travailles en ce moment sur un site internet en 3D, codé en flex, et je rencontre quelques petits soucis.
J'ai réussi à créer un environnement 3D, insérer des planes en 3D dans ce même environnement, et je suis même arrivé a gérer mon 1er mouvement de camera !

Le site s'organise de cette facon :

-Un environnement 3D contenant des composants 3D (plane ici), et des mouvements de caméra qui me font passer d'une plane à l'autre, à partir d'un clic sur le menu des planes.
-J'utilise Papervision3D et les librairie Tweener et Efflex.
- J'arrive a faire avancer la caméra au lancement de mon application par l'init de mon environnement3D.


Le problème que je rencontre actuellement est que je n'arrive pas à gérer les mouvements de caméra autrement que par mon initWorld3D... Ce qui signifie que l'appel d'une fonction sensée gérer la caméra par le clic d'un de mes boutons(qui se trouve dans un fichier mxml) ne fonctionne pas.. Je n'ai pas d'erreurs affichées, mais ça ne marche pas...

J'ai alors pensé que la solution résidait dans le AddEventListener(que je ne maitrise pas encore ), mais sans grande conviction. Je vous joint ici mon code ActionScript, et mon bouton en MXML, en espérant que quelqu'un pourra m'aider !

(Je précise que la fonction où j'aimerai gérer ma caméra est moveTo..)


Merci d'avance.




Code ASP3 :



Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
package
{
	import caurina.transitions.Tweener;
 
	import flash.events.Event;
	import flash.events.MouseEvent;
 
	import mx.containers.Canvas;
	import mx.core.UIComponent;
 
	import org.papervision3d.cameras.Camera3D;
	import org.papervision3d.objects.DisplayObject3D;
	import org.papervision3d.render.BasicRenderEngine;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.Viewport3D;	
 
	public class myCanvas3D extends Canvas
	{
		// Attributs spécifique à la création du monde 3D
		public var viewport:Viewport3D;
		public var scene:Scene3D;
		public var camera:Camera3D;	
		public var camera1:Camera3D;
		public var renderer:BasicRenderEngine;
 
		private var originX:Number = 0;
		private var originY:Number = 0;
		private var originZ:Number = -509;
 
		// Attribut correspondant au tableau des fils.
		public var childrenObjects:Array = new Array();
 
		// Attribut indiquant la transparence du composant
		public var transparent:Boolean = true;
 
		public function myCanvas3D()
		{
			super();
		}	
 
		public function initWorld3D():void
		{
			createViewport();
            createRenderer();
            createScene3D();
            createCamera3D();				
 
 
			//camera.rotationY = camera.rotationY+20;									
			//scene.addChild(new Plane(new ColorMaterial(0xff0000),100,100));
 
			if (transparent)
				setBackground();
 
			addEventListener(Event.ENTER_FRAME, render);
		}				
 
        private function createViewport():void
        {
            viewport = new Viewport3D(this.width, this.height, true, true);
			rawChildren.addChild(viewport);
			viewport.interactive = true;			                        
 
        }
 
        private function createRenderer():void
        {
 
            renderer = new BasicRenderEngine();
 
        }
 
        private function createScene3D():void
        {
 
            scene = new Scene3D();
        }
 
        public function createCamera3D():void
        {            
            camera = new Camera3D();
			camera.far = 5000;
			camera.near = 10;
			camera.fov = 60;
			camera.zoom = 1;
			camera.x = originX;
			camera.z = originZ;
			camera.y = originY;
 
 
			//Tweener.addTween(camera, {x : 1000, y : 650, z : -489, time:1, delay:1, transition:"easeinoutexpo"});
 
	        //reverse();
 
        }
 
        public function reverse():void
        {
        	//camera1 = new Camera3D();
 
        	//Tweener.addTween(camera1, {x : 1000, y : 650, z : -489, time:10, transition:"easeinoutexpo"});
        	//Alert.show('TOTO');        	
        }
 
		// Move the camera to a specific set of coords
 
		public function moveTo():void
		{
 
			//Alert.show('tutu');
			Tweener.addTween(camera, {x : 1000, y : 650, z : -489, time:10, transition:"easeinoutexpo"});	
			//Tweener.addTween(camera, {x:-1900, y:60, z:216, rotationX:-10, rotationY:90, rotationZ:0, time:1, transition:"easeinoutexpo"});
			//Alert.show('tata');			
			//Alert.show('tyty');
		}
 
 
		private function setBackground():void
		{
			viewport.graphics.clear();
			viewport.graphics.beginFill(0x000000,0.0);
			viewport.graphics.drawRect(0,0,this.width,this.height);
			viewport.graphics.endFill();
		}
 
 
		private function render(e:Event):void
		{
			//camera.x += (((stage.mouseX-(stage.stageWidth* 0.5))*2) - camera.x )*0.05;
			//camera.rotationY += (((stage.mouseY-(stage.stageWidth* 0.5))*2) - camera.y )*0.0005;
 
		 	//camera.rotationX += (((stage.mouseX-(stage.stageWidth* 0.5))*2) - camera.rotationX)*0.5;
 
			//camera.rotationY += (((stage.mouseY-(stage.stageWidth* 0.5))*2) - camera.rotationY )*0.5;
			//camera.rotationY += (((stage.mouseY-(stage.stageWidth* 0.5))*2) - camera.rotationY )*0.5;
			renderer.renderScene(scene,camera,viewport);
		}
 
		override protected function childrenCreated():void
		{
			super.childrenCreated();
			initWorld3D();
			for each (var child:UIComponent in this.getChildren())
			{
				if (child is myUiComponent)
				{
					var child2:myUiComponent = myUiComponent(child);
					scene.addChild(child2.displayObject3D);
				}
				if (child is myContainer)
				{
					trace("container");
					var child3:myContainer = myContainer(child);
					scene.addChild(child3.displayObject3D);
				}
			}
 
			for each (var child5:DisplayObject3D in this.scene.children)
				trace("scene enfant name = "+child5.name);
		}
 
 
	}
}

Code MXML :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
<mx:Button styleName="BouttonAgence"  width="92"  height="35" id="BouttonAgence" mouseOver="{monIndex=0;}" click="{view.moveTo();}"/>