cece2000
Messages postés24Date d'inscriptionvendredi 11 janvier 2008StatutMembreDernière intervention21 mai 2008
-
23 avril 2008 à 15:57
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?
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 23 avril 2008 à 19:13
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.
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 24 avril 2008 à 15:34
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.
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 24 avril 2008 à 15:56
"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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cece2000
Messages postés24Date d'inscriptionvendredi 11 janvier 2008StatutMembreDernière intervention21 mai 2008 23 avril 2008 à 18:41
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!
cece2000
Messages postés24Date d'inscriptionvendredi 11 janvier 2008StatutMembreDernière intervention21 mai 2008 23 avril 2008 à 19:28
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.
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 24 avril 2008 à 09:49
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.
faiblard
Messages postés337Date d'inscriptionsamedi 3 février 2007StatutMembreDernière intervention 4 janvier 2011 24 avril 2008 à 09:54
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 !
cece2000
Messages postés24Date d'inscriptionvendredi 11 janvier 2008StatutMembreDernière intervention21 mai 2008 24 avril 2008 à 11:26
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?
cece2000
Messages postés24Date d'inscriptionvendredi 11 janvier 2008StatutMembreDernière intervention21 mai 2008 24 avril 2008 à 12:10
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....)
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 24 avril 2008 à 12:11
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.
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 24 avril 2008 à 12:15
" 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
dj_ouf
Messages postés221Date d'inscriptionvendredi 15 avril 2005StatutMembreDernière intervention 6 septembre 2011 24 avril 2008 à 14:33
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