Redimensionner un movie clip dynamiquement [Résolu]

Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
- - Dernière réponse :  Pelmo - 30 oct. 2010 à 15:52
Bonjour à tous,
je suis débutant en flash mais essaye de s'en sortir! Je connais les bases de flash mais j'ai une question qui ne trouve pas (encore) de réponse. Voilà, je voulais savoir s'il était possible de redimensionner dynamiquement un movie clip. En effet, dans mon animation je drag and drop des objets, mais je voudrais que l'utilisateur puisse agrandir ou retrecir comme il le souhaite ce movieclip. Comment dois-je m'y prendre? Où m'informer?

HELP!

Merci d'avance.
Afficher la suite 

20/25 réponses

Meilleure réponse
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
3
Merci
Salut!

Bien sûr c'est tout à fait possible!
En jouant sur les propriétés _xscale et _yscale de ton movieclip.

ex : monClip._xscale += 50;   (au passage c'est une valeur en pourcentage)

Ensuite il faut combiner cela avec des actions que tu désirerai ( clique sur un bouton, touche + du clavier, ect...)

Ex dans le cas d'un bouton "augmenter la taille" :

btnAugmenterTaille.onPress = function() {
    monClip._xscale += 50;
}

ps : tes clips et boutons placés sur la scène doivent avoir un nom d'occurence

En Espérant t'avoir un peu éclairé

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dj_ouf
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
3
Merci
Y'a pas de quoi!

- Oui, tu peux aisément spécifier une limite d'agrandissement des clips à l'aide d'un condition :

if (monClip._width < 400) {
    monClip._xscale += 50;
}
( si la largeur totale de monClip est inférieure est 400 alors augmenter la taille de monClip de 50% ).

Tu peux très aussi faire un test de condition sur la propriété _xscale directement :

if (monClip._xscale < 200) {
    monClip._xscale += 50;
}

- Pour effectuer une rotation : utilise la propriété _rotation   :p  (en %)

- Alors pour redimensionner tes occurences, je dirais qu'il y a 3 solutions rapides :
    - soit comme tu dis, répéter la ligne en changant le nom du clip à chaque clip
    - soit nommer tous tes clips avec un prexife commun et utiliser une boucle :

       for (i=0 ; i<[nombre de clips au total] ; i++) {
            nomClip[i]._xscale += 50;         
        }

      Avec cette méthode, tu peux en 3 lignes appliquer une transformation à autant d'occurences que tu veux!

    - soit encore à l'aide d'unc boucle, énumérer toutes les occurences placées sur la scène:

    for in(clip in this) {
       clip._xscale += 50;
    }
    (à tester, je n'ai pas testé)

Voilà à toi de tester et choisir ce que tu veux :)

Mais globalement, si tu désires appliquer la transformation à tous les clips sans exceptions, il  y a une méthode extrément facile qui consiste à placer tous ces clips dans un clip conteneur principal qui sera placé sur la scène.
Ainsi, tu auras juste à modifier le _xscale de ce conteneur . Mais il y a un seul défault, c'est que les origines (d'un point de vue repère sur la scène) seront tous décalés.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dj_ouf
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
3
Merci
Oui tout à fait, tu dois mettre ["bec"+i]  pour que la condition prenne effet sur tous les clips.

btnAugmenterTaille.onPress = function() {
        for (i=0 ; i<3 ; i++) {
            if (this._parent["bec"+i]._xscale < 200) {

                this._parent["bec"+i]._xscale += 50;

            }

        }
}

La condition "if" doit être à l'intérieur de la boucle for pour qu'elle prenne en compte tous les clips. Sinon, si tu l'avais nommé seulement "bec1", le script se serait contenté de tester 3 fois sur ce même clip.
En fait tous le code que tu insères à l'intérieur de la boucle sera executé autant de fois que la boucle s'incrémentera.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dj_ouf
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
3
Merci
"Le savoir s'accroit lorsque'on le partage" :)  Hé bien je suis fier de t'avoir été utile !

Pour ta finilisation c'est encore une fois possible (il n'y a presque plus de limite avec l'actionscript).
Je t'ai répondu dans ton autre post :

clip.startDrag( true , left, top , right , bottom);

Les valeurs de



left, top , right , bottom délimentent en fait un rectangle virtuel sur la scène dans lequel tu peux dragger ton clip.  (coin haut-gauche et coin bas-droit)

Bonne chance dans la suite de ton initiation de l'AS!

Djouf

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de dj_ouf
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
merci beaucoup dj-ouf! ça fonctionne parfaitement!

Est ce que je peux dire au bouton de s'arréter à une certaine taille d'agrandissement pour que mes formes n'occupent pas tout l'écran?

Est il possible de créer un bouton pour faire une rotation de la forme? Si oui, est-ce avec rotate?


De plus, pour faciliter mon animation j'aimerais bien que l'effet du "bouton redimenssioneur" face effet sur l'ensemble des formes que j'ai. Dois-je répéter la ligne de code pour chacune des formes (environ 50) ou y aurait-il un moyen pour dire au bouton de prendre en compte un ensemble de forme?
(je sais pas si je suis très clair... désolé)

Désolé pour toutes ces questions mais je patauge totalement et sent bien que je touche le resultat que je veux du bout des doigts!

encore merci!
Commenter la réponse de cece2000
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
Un énorme merci pour ta réponse détaillée et si rapide!!!
Les forums manque de gens comme toi!

Par contre je dois vraiment être nul car avec toutes des données précieuses le résultat ne fonctionne pas. (pas encore?)

Je te donne le code que j'ai dans mon image principale peut être que tu sauras me trouver ce qui cloche. Je dois avoir oublier plein de trucs je pense.

for (i=0 ; i<[3] ; i++) {
bec[i]._xscale += 50;
}

btnAugmenterTaille.onPress = function() {
bec1._xscale += 50;
bec1._yscale += 50;
}

if (bec[i]._xscale < 100) {
bec[i]._xscale += 50;
}


PEut etre as tu la solution? Désolé pour toutes ces questions!
Commenter la réponse de cece2000
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
ah oui désolé pour préciser mes movie clip s'appelle bec1 bec2, pour l'instant je n'essaye le code qu'avec 2 mc.
Commenter la réponse de cece2000
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
for (i=0 ; i<[3] ; i++) {
bec[i]._xscale += 50;
}

btnAugmenterTaille.onPress = function() {
bec1._xscale += 50;
bec1._yscale += 50;
}

if (bec[i]._xscale < 100) {
bec[i]._xscale += 50;
}

désolé je n'arrivais pas a entrer mon code avec les saut de ligne.
Commenter la réponse de cece2000
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
Re salut ! :p

Tu  y étais presque! Juste une petite erreur de placement. Voilà avec correction, pour le cas de 3 clips nommés bec1, bec2 et bec3 sur la scène :

btnAugmenterTaille.onPress = function() {

        for (i=0 ; i<3 ; i++) {


            if (bec[i]._xscale < 200) {


                bec[i]._xscale += 50;


            }


        }

}

Voilà, en fait il fallait imbriquer les conditions, car nous devons faire le test seulement lorqu'on a cliqué sur le bouton btnAugmenterTaille. Ce n'est pas forcément évident à comprendre au début, mais à force de l'utiliser on en comprend la subtilité, sisi!
Sinon, tu n'avais pas besoin de mettre le 3 entre crochets sur la ligne du for, car en fait le crochet sert à spécifier qu'on veut interpréter le nom du clip avec la valeur d'une variable ;)
Comme ceci :   bec[variable]  --> donne "bec4" si variable = 4.

Ca donne des possibilités énorme n'est ce pas ?

Bon courage pour la suite, n'hésites pas
Commenter la réponse de dj_ouf
Messages postés
338
Date d'inscription
samedi 3 février 2007
Statut
Membre
Dernière intervention
4 janvier 2011
0
Merci
Bonjour,



for (i=0 ; i<[3] ; i++) {

            bec[i]._xscale += 50;          

        }

btnAugmenterTaille.onPress = function() {

   bec1._xscale += 50;

   bec1._yscale += 50;

}

if (bec[i]._xscale < 100) {

    bec[i]._xscale += 50;

}

A quoi te sert ton if? la a vu de nez dans ton bec[i] doit correspondre a bec[3] comme il n'est pas dans ta boucle for...et il ne marchera pas dans le cas de ton appuie bouton puisqu'il n'est pas dans la fonction... (j'ai lu en diagonal mais bon...)

Je pense plutot que tu voulais mettre dans le style :




for (i=0 ; i<[3] ; i++) {


            bec[i]._xscale += 50;          


        }


btnAugmenterTaille.onPress = function() {


  
if (bec1._xscale < 100)
 {

        bec1._xscale += 50;



       bec1._yscale += 50;

    }


}

-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
Commenter la réponse de faiblard
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
bonjour,

merci de suivre mes essais!

j'ai bien utiliser le nouveau code que tu m'as laissé dj_ouf. et ça ne marche toujours pas...
Je ne sais pas ce qu'il manque. Il ne fallait pas déclarer une variable ou quelquechose comme ça avant de mettre cette nouvelle ligne de code?

je ne comprend vraiment pas ce qui cloche.
:(
Commenter la réponse de cece2000
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
Statement must appear within on/onClipEvent handler
Commenter la réponse de cece2000
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
Pardon,

je crois que j'ai fait une grosse erreur!!

Cette syntaxe est reservée aux tableaux :   bec[i]   -> i correspond à un indice de tableau

Donc cela serait "normal" que ça ne marche pas car flash cherche un élément contenu dans un tableau appelé "bec"!

La bonne syntaxe devrait être celle ci :

this["bec"+i]   ( this correspondant en fait à la scène (_root) ) -> flash interprètera comme ceci this.bec1 , this.bec2, ect... :D

au final :


btnAugmenterTaille.onPress = function() {
        for (i=0 ; i<3 ; i++) {
             this["bec"+i]._xscale += 50;
        }
}

Essayes et tiens moi au courant !

Commenter la réponse de dj_ouf
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
"

Statement must appear within on/onClipEvent handler"

--> hmm, je crois que cette erreur apparait lorsque tu essayes de placer du code "sur" un clip.

Tu dois placer le code sur la scène, donc dans une image-clé du scénario principal.
Commenter la réponse de dj_ouf
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
ça ne fonctionne toujours pas.

aïe aïe aïe!
Commenter la réponse de cece2000
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
en fait je n'ai mis que ces quelques lignes de codes dans ma scene principal il manque peut etre des autres lignes de codes avant de mettre cette fonction? (je n'ai pas de _root par exemple....)
Commenter la réponse de cece2000
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
Je suis distrait... ici, 'this' désigne le bouton( car on est à l'intérieur de la fonction onPress du bouton ). Il faut donc remonter d'un niveau, et pour cela le mot-clé "_parent" est approprié.

Essayes ceci :

btnAugmenterTaille.onPress = function() {

        for (i=0 ; i<3 ; i++) {

             _parent["bec"+i]._xscale += 50;

        }

}

Sinon, un petit test simple et efficace pour s'assurer qu'on pointe correctement les bonnes instances :

trace(_parent["bec"+i]._xscale);   à mettre à l'intérieur de la boucle for, et cela devrait te retourner une valeur cohérente, preuve que les instances sont bien présentes.
Commenter la réponse de dj_ouf
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
"
en fait je n'ai mis que ces quelques lignes de codes dans ma scene
principal il manque peut etre des autres lignes de codes avant de
mettre cette fonction? (je n'ai pas de _root par exemple....)"

-->non normalement tu n'as pas besoin de mettre lignes avant la fonction, sauf p-e des quelquonques initialisations mais pas indispensables.

Pour le _root, noramlement c'est à prohiber (car en cas de chargement de l'anim dans un autre swf, le _root devient totalement autre chose puisque il représente le niveau le plus bas).

Il faut utiliser les mots-clés "this" et "_parent" à la place.
this pour désigner "ce niveau çi"
_parent pour remonter d'un niveau
Commenter la réponse de dj_ouf
Messages postés
24
Date d'inscription
vendredi 11 janvier 2008
Statut
Membre
Dernière intervention
21 mai 2008
0
Merci
je crois que je vais laisser tomber et faire ligne par ligne parceque ça ne fonctionne pas non plus...
Commenter la réponse de cece2000
Messages postés
221
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
6 septembre 2011
0
Merci
Noon ne déséspères pas ^^

J'ai fait le test sous flash, car ça m'étonnais franchement....

Désolé, je n'avais pas le temps de faire ça avant
Alors j'ai testé et effectivement il manquait quelques chose, de très peu, en fait la combinaison des 2.
Voilà le code, testé et fonctionnel :p

btnAugmenterTaille.onPress = function() {
        for (i=0 ; i<3 ; i++) {
             this._parent["bec"+i]._xscale += 50;
        }
}

il manquait juste le "this" devant "_parent" !
Commenter la réponse de dj_ouf