module inscription newsletter haut de page forum mobile

Rejeter la notice

ateliers live resolve avec forest

Ateliers Live Resolve - Formez-vous en ligne tous les mois avec Forest !
Faites rapidement évoluer la qualité de vos étalonnage avec nos ateliers mensuels de 3h.
Toutes les infos

Ateliers et Formations

Expressions - Random sur une valeur

Discussion dans 'Adobe After Effects' créé par magna_, 17 Mai 2013.

  1. magna_

    Appréciations:
    +0 / 0 / -0

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    207
    Bonjour à tous,

    J'ai un petit problème avec un chiffre que je veux modifier par expression et je n'arrive pas à trouver l'astuce. Je vous explique.

    J'ai une composition mère (comp_mère) qui possède, disons, 254 compositions ("comp_box1", "comp_box2, "comp_box3"...."comp_box254")

    Dans ces 254 compositions, j'ai :
    - un layer avec un texte différent selon les box
    - une précomposition (precomp_Truc) ; qui est donc copier dans chaque 254 compos. (je precise que n'ai pas le choix d'avoir cette precomposition).

    Dans cette précomposition (precomp_Truc), j'ai un chiffre. (Qui se tiendra en 1 et 150, mais ce n'est pas très important pour l'instant.)

    Quand je fais une lecture de ma composition mère (comp_mère), j'aimerais que ce chiffre soit diffèrent à chaque fois qu'apparait une de ces 254 boxs. Pour infos ces 254 boxs apparraissent à différent moment sur la timeline de ma composition mère.

    Voilà :-)

    Pour infos, j'ai commencé par mettre sur la variable "Source text" de mon calque chiffre:
    seedRandom(1, true);
    VAR=random(1,150);
    Math.floor(VAR);

    Ensuite j'ai essayé de trouver une facon de modifier par code la variable "1" de mon seedRandom pour qu'il soit différent à chaque fois que ma précomp est "appelé". J'ai pensé au fait que chacune de mes 254 box apparaissaient à des moments sur ma timeline, que ca pourrait etre un moyen de recuperer une valeur particulière, mais bon, vous voyez bien, je ne m'en sors pas.

    Si vous avez réussi à comprendre mon problème, n'hésitez pas à me donner vos conseils.

    Merci!
     
  2. Sequelles

    Sequelles Modérateur
    Modérateur So
    Appréciations:
    +2 / 13 / -0

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    J'ai beaucoup de mal à comprendre tes explications.:weird:

    Pour afficher différentes images d'une précomp utilisée plusieurs fois il faut appeler des images différentes dans le temps avec une expression au niveau d'un remappage temporel.
     
  3. beginUndoGroup

    Appréciations:
    +4 / 2 / -0

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Si j'ai bien compris, tes box sont (1) visibles épisodiquement, indépendamment les unes des autres (ou en tout cas pas toutes en même temps), (2) pendant le temps où une box est visible son"chiffre" ne change pas, et (3) la prochaine fois qu'elle sera visible son "chiffre" sera différent...

    Toutes ces infos se trouvent dans la comp_mère, il faut que tu les amènes dans ta précomp_truc.

    // </code>
    mainComp = comp("precomp_mère");
    boxLayer = mainComp.layer("comp_box........"); // compléter avec le bon indice
    boxOpacity = boxLayer.opacity;

    if (boxOpacity !== 0){
    // remonter le temps pour trouver le point ou la box devient visible
    var visible = true, t = time, f = timeToFrames(time);
    while(visible && t>= boxLayer.inPoint){
    t = framesToTime(--f);
    visible = boxOpacity.valueAtTime(t);
    }
    // Mettre le randomSeed à ce point
    seedRandom(++f, true);
    VAR=random(1,150);
    Math.floor(VAR);
    }
    else 0; // n'importe quel nombre de toute façon le calque est pas visible
    // <code>

    Rem : si tu en as 254 ça risque d'être assez lourd, surtout si les périodes d'opacité >0 sont longues.
    Si la visibilité est pilotée pas des keys ou des markers ça peut alléger (en faisant une recherche par nearestKeyIndex() au lieu d'une boucle).
     
  4. magna_

    Appréciations:
    +0 / 0 / -0

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    207
    Merci à vous deux pour la réponse.
    Et mon problème est un peu compliqué à expliquer.

    Séquelles, en fait dans ma precomp je n'ai qu'un calque de texte avec un chiffre dedans. Je veux que ce chiffre soit fixe, mais que par contre, à chaque que cette précomp est "appelé" par une comp parente, ce chiffre soit différent.

    C'est chiant que je ne puisse pas mettre d'images, ce serait bien plus sipmle à comprendre.

    beginUndoGroup, bon ca ne marchera pas dans mon cas mais merci pour le code, ca me donne des indices et je découvre de nouvelles façons de faire.
    En fait, je ne peux pas l'utiliser tel quel car je devrais avoir un code différent dans chaque précomp_Truc (ce que je ne souhaite pas) à cause du :
    boxLayer = mainComp.layer("comp_box........")

    Sinon par rapport à ton intro :
    (1) tes box sont visibles épisodiquement, indépendamment les unes des autres (ou en tout cas pas toutes en même temps).
    c'est à peu près ca.
    box1 est là de 2:04 à 3:15
    box2 est là de 2:23 à 4:11
    box3 est là de 3:18 à 7:25
    etc...


    (2) pendant le temps où une box est visible son"chiffre" ne change pas,
    c'est bon.

    (3) la prochaine fois qu'elle sera visible son "chiffre" sera différent...
    Chaque box ne peut apparaitre qu'une seule fois.

    Bon... ne vous embêtez pas, c'est galère à comprendre pour vous.
    si je trouve la solution, je repasse faire un tour.

    Merci !
     
  5. magna_

    Appréciations:
    +0 / 0 / -0

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    207
    Ah, j'ai une petite question (un peu conne sans doute) mais :
    A quoi correspond le ++ et le -- dans l'expression
    seedRandom(++f, true); par exemple
     
  6. beginUndoGroup

    Appréciations:
    +4 / 2 / -0

    Points Repaire:
    3 170
    Recos reçues:
    6
    Messages:
    142
    Salut,
    f++ évalue la variable puis l'incrémente de 1;
    ++f incrémente de 1 la variable f puis l'évalue;

    par exemple
    f=1; a= f++ ===> au final a=1 et f=2;
    f=1; a=++f ===> au final a=f=2;
    f=1; a = ++f++ ===> error :]

    Sinon pour la numérotation, tu peux t'en sortir avec la même expression pour toutes les box.
    Tu peux remplacer les 3 premières lignes
    mainComp = comp("precomp_mère");
    boxLayer = mainComp.layer("comp_box........"); // compléter avec le bon indice
    boxOpacity = boxLayer.opacity;

    par:

    idx = thisLayer.name.slice(8); // le numero de la box
    mainComp = comp("precomp_mère");
    boxLayer = mainComp.layer("comp_box" + idx);
    boxOpacity = boxLayer.opacity;
     
  7. Sequelles

    Sequelles Modérateur
    Modérateur So
    Appréciations:
    +2 / 13 / -0

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Ça c'est impossible pour After Effects.
     
  8. magna_

    Appréciations:
    +0 / 0 / -0

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    207
    Bon et bien c'est clair.
    Merci tout de même, et merci pour les explications bUG !
     
Chargement...
Discussions similaires - Expressions Random valeur
  1. ottix
    Réponses:
    9
    Nb. vues:
    670

Dernières occasions

 

Partager cette page

Dernières Occasions

 
Vous souhaitez annoncer sur le Repaire ? Contactez-nous