IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Duplication de Clips et Instance


Sujet :

ActionScript 3

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    car1.y=10
    car2.y=40
    car3.y=70
    car4.y=100
    Mais ça me renvoie

    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

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    bonjour,

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


  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Merci mais j'avais déjà essayé tout ça en vain:

    ça me renvoie:
    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

  4. #4
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.getChildByName("car1").y=10;

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    SUPER !!!
    Ca fonctionne !!

    Merci de ton aide précieuse !

    A+
    coincoin22

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Aie !! Je retombe sur un os... Comment créer des tween par variable:

    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
     
    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

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

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

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

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    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 : 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
    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.

  9. #9
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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).

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    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 : 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
    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

  11. #11
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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 ?

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    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

  13. #13
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    peux tu identifier précisément la ligne posant soucis ?

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    C'est celle-là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	  car = getChildByName("car"+i);
    Dans ce code complet:

    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
    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)
       }
    }

  15. #15
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    essaie de caster ton objet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    car = (Cars)getChildByName("car"+i);

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Aie !!

    1086: Syntax error: expecting semicolon before getChildByName.
    1084: Syntax error: expecting rightbrace before semicolon.

  17. #17
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Désolé je t'ai filé la syntaxe Java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    car = Cars(getChildByName("car"+i));

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    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

  19. #19
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
    }

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par défaut
    Je vais remettre tout ça dans l'ordre... Je te tiens au courant.

    Merci en tout cas !!!

    A+
    Coincoin22

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Chargement externe movieclip swf instance duplication.
    Par ChapsF dans le forum ActionScript 3
    Réponses: 4
    Dernier message: 23/11/2009, 23h26
  2. Duplication de clip avec champ de texte dynamique
    Par boz_j dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 25/07/2009, 19h33
  3. clone ou duplicate d'objet as3 (movie clip)
    Par roduce dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 30/08/2008, 09h58
  4. duplication movieclip + les clips qui lui sont rattachés
    Par Moonet dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 20/07/2008, 02h15
  5. Réponses: 1
    Dernier message: 15/08/2005, 16h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo