Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 15h52   #1
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Par défaut Duplication de Clips et Instance

Bonjour,

J'ai un petit souci:

- J'ai un clip nommé car_init dans ma bibliothèque + link AS3 "CARS"

cela me permet de dupliquer 4 fois ce clip sur ma scène:

Code :
1
2
3
4
5
6
7
8
var car:CARS; 
for ( var i:int = 1; i< 5; i++ ) {
car = new CARS();
car.name="car"+i;
addChild(car);
car.x=100*i
car.y = 350
}
Ce que je voudrais c'est en dehors de cette boucle déplacer ou interagir (tween, etc...) sur le clip car1, car2, car3 et car4.

Par exemple et simplement:

Code :
1
2
3
4
5
 
car1.y=10
car2.y=40
car3.y=70
car4.y=100
Mais ça me renvoie

Citation:
1120: Access of undefined property car1.
Il ne reconnait pas les instances car1, car2... C'est bien X.name qui définit le nom de l'occurrence du clip ?

Merci de votre aide !!!

Coincoin22
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 15h16   #2
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
bonjour,

essaie d'accéder aux références comme ceci :

__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 11h31   #3
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Merci mais j'avais déjà essayé tout ça en vain:

ça me renvoie:
Citation:
TypeError: Error #1010: Un terme n'est pas défini et n'a pas de propriété.
Je suis désespéré. C'est pourtant pas compliqué à première vue ??!

Merci de votre aide !!

Coincoin22
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 11h58   #4
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
En fait, c'est logique, tu définis tes car1, car2 etc sur la propriété name et non id, il faut donc que tu récupères la référence vers ces clips en utilisant getChildByName().

Code :
1
2
 
this.getChildByName("car1").y=10;
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/09/2011, 13h57   #5
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
SUPER !!!
Ca fonctionne !!

Merci de ton aide précieuse !

A+
coincoin22
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h03   #6
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Aie !! Je retombe sur un os... Comment créer des tween par variable:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
var mvt_car:Tween;
 
function move_car(e:TweenEvent = null):void {
		for (i=1;i<5;i++)
		{
		this.getChildByName("car"+i).y=350
		this.getChildByName("car"+i).x=Math.floor(Math.random() * (300)) + 200;
		var vitesse=Math.floor(Math.random() * (20)) + 40;
		var posInit:int = this.getChildByName("car"+i).y;
		var car_clip = "car"+i
		mvt_car = new Tween(car_clip, "y", Regular.easeOut, posInit, 50, vitesse);	
		mvt_car.addEventListener(TweenEvent.MOTION_FINISH ,move_car)
		}
}
ça coince !! ça renvoie :
1046: Type was not found or was not a compile-time constant: TweenEvent.

Aidez-moi !!!

Merci
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h16   #7
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
Il faut que tu définisses des types pour tes variables !
Tu peux aussi commencer par simplifier un peu ta fonction pour commencer :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
function move_car(e:TweenEvent):void 
{
   var car:CARS;
   var vitesse:Number;
   var posInit:Number;
   var mvt_car:Tween;
 
   for (i=1;i<5;i++)
   {
      car = getChildByName("car"+i);
      car.y=350
      car.x=Math.floor(Math.random() * (300)) + 200;
      vitesse=Math.floor(Math.random() * (20)) + 40;
      posInit = this.getChildByName("car"+i).y;
 
      mvt_car = new Tween(car, "y", Regular.easeOut, posInit, 50, vitesse);	
      mvt_car.addEventListener(TweenEvent.MOTION_FINISH ,move_car)
   }

pour ton problème : es tu sur d'avoir importé dans ta classe TweenEvent ? PS: ta fonction part en vrille car elle s'exécutera indéfiniment...
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 15h54   #8
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
C'est normal qu'elle tourne en boucle... C'est ce que je veux ;-)

Oublions cette ligne de code pour le moment.

J'ai simplifié le code et le voici complet:

Code :
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
import flash.display.MovieClip;
import fl.transitions.Tween;
 
function move_car(e:TweenEvent = null):void 
{
   var car:CARS;
   var vitesse:Number;
   var posInit:Number;
   var mvt_car:Tween;
 
   for (var i:int=1;i<5;i++)
   {
	  car = new CARS();
	  car.name="car"+i;
	  addChild(car);
	  car.x=100*i
	  car.y = 350
      vitesse=Math.floor(Math.random() * (20)) + 40;
      posInit = this.getChildByName("car"+i).y;
 
      mvt_car = new Tween(car, "y", Regular.easeOut, posInit, 50, vitesse);	
      //mvt_car.addEventListener(TweenEvent.MOTION_FINISH ,move_car)
   }
}
 
move_car();
Même problème:
1046: Type was not found or was not a compile-time constant: TweenEvent.

Comment identifier les tweens (tween1 pour car1, tween2 pour car2...)

On va y arriver à force ;-)

Merci de me donner une partie de ton temps en tout cas.
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 16h33   #9
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
si tous tes imports sont là, il te manque toujours l'import de la classe TweenEvent...

De plus ta stratégie n'est pas bonne, tu appelles ta fonction manuellement alors qu'elle devrait être appelée automatiquement uniquement par un événement.

pour ta question sur les tweens, tu n'identifies pas les tweens en fonction des cars mais tu identifies les cars en fonction des tweens (via la référence e.target par exemple).
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 16h40   #10
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Ok j'ai rectifié mais cette fois-ci:
1118: Implicit coercion of a value with static type flash.displayisplayObject to a possibly unrelated type CARS.


Code :
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
import flash.display.MovieClip;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
 
function move_car(e:TweenEvent):void 
{
   var car:CARS;
   var vitesse:Number;
   var posInit:Number;
   var mvt_car:Tween;
 
   for (var i:int=1;i<5;i++)
   {
      car = new CARS();
	  car.name="car"+i;
	  addChild(car);
	  car = getChildByName("car"+i);
      car.y=350
      car.x=Math.floor(Math.random() * (300)) + 200;
      vitesse=Math.floor(Math.random() * (20)) + 40;
      posInit = this.getChildByName("car"+i).y;
      mvt_car = new Tween(car, "y", Regular.easeOut, posInit, 50, vitesse);	
      //mvt_car.addEventListener(TweenEvent.MOTION_FINISH ,move_car)
   }
}
Merci encore
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 16h45   #11
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
tu dois également importer ta classe CARS. Par convention au passage, le nom des classes devraient s'écrire en CamelCase donc ici Cars et pas CARS

Quel éditeur utilises tu ? Ca ne te souligne pas ces erreurs ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 16h53   #12
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Je suis sur CS5 et comme tu le vois je suis débutant même si je me débrouille en bidouillant (malheureusement). Pour une fois que je voulais faire les choses proprement ... ;-(

J'ai rectifié CARS par Cars. Même souci.

Je vais devoir créer 4 fonctions sinon. J'aurai souhaité optimiser le tout mais je ne veux pas te faire perdre ton temps.

Merci de ton aide encore
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h07   #13
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
peux tu identifier précisément la ligne posant soucis ?
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h09   #14
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
C'est celle-là:

Code :
	  car = getChildByName("car"+i);
Dans ce code complet:

Code :
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
import flash.display.MovieClip;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
 
function move_car(e:TweenEvent):void 
{
   var car:Cars;
   var vitesse:Number;
   var posInit:Number;
   var mvt_car:Tween;
 
   for (var i:int=1;i<5;i++)
   {
      car = new Cars();
	  car.name="car"+i;
	  addChild(car);
	  car = getChildByName("car"+i);
      car.y=350
      car.x=Math.floor(Math.random() * (300)) + 200;
      vitesse=Math.floor(Math.random() * (20)) + 40;
      posInit = this.getChildByName("car"+i).y;
      mvt_car = new Tween(car, "y", Regular.easeOut, posInit, 50, vitesse);	
      //mvt_car.addEventListener(TweenEvent.MOTION_FINISH ,move_car)
   }
}
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h11   #15
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
essaie de caster ton objet :

Code :
1
2
 
car = (Cars)getChildByName("car"+i);
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h15   #16
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Aie !!

1086: Syntax error: expecting semicolon before getChildByName.
1084: Syntax error: expecting rightbrace before semicolon.
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h18   #17
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
Désolé je t'ai filé la syntaxe Java

Code :
1
2
 
car = Cars(getChildByName("car"+i));
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h24   #18
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
En effet, plus d'erreur mais rien ne s'affiche ??
Où sont passées mes car ??

Il me semblait qu'avec AddChild, je les affichais... ? C'est ce qu'on a fait au-dessus ?? J'y comprends plus rien

en tout cas, j'aurais appris des choses avec toi
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h34   #19
Membre Expert
 
Avatar de Madfrix
 
Inscription : juin 2007
Messages : 2 279
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : juin 2007
Messages : 2 279
Points : 2 325
Points : 2 325
encore faut il que ta fonction qui les affiche soit exécutée

mais je le répéte, il faut que tu découples l'ajout sur ta scene de tes cars et les événements qui leur sont liés.

En somme, il faut que tu fasses quelque chose comme ca :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
protected function init():void
{
   // ici ta boucle créant tes cars, ajoutant les events puis ajoutant tes occurences sur la scene
}
 
protected function move_car():void
{
   // ici tu lances tes tweens sur tes cars
}
 
protected function handleMoves(e:TweenEvent):void
{
   // ici tu récupère l'event TweenEvent.MOTION_FINISH ainsi que la car en faisant var car:Cars = Cars(e.currentTarget);
}
__________________
Je ne réponds pas aux questions envoyées par mp
Madfrix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2011, 17h37   #20
Nouveau Membre du Club
 
Inscription : juillet 2007
Messages : 170
Détails du profil
Informations forums :
Inscription : juillet 2007
Messages : 170
Points : 39
Points : 39
Je vais remettre tout ça dans l'ordre... Je te tiens au courant.

Merci en tout cas !!!

A+
Coincoin22
coincoin22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h28.


 
 
 
 
Partenaires

Hébergement Web