Probleme d'affichage de clip imbriqué dans une boucle

cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008 - 3 août 2008 à 22:22
cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008 - 5 août 2008 à 11:00
Je ne parviens pas à imbriquer le code as d'un clip dans une boucle qui en change les paramètres.

Le but: lorsque la souris passe sur le clip, celui ci se met à tourner sur son axe vertical pendant un temps fixé. (_xscale est utilisé pour réduire et augmenter le clip).

En fait lorsque le code est imbriqué, AS calcule tous les résultats de la boucle et affiche seulement le résultat final. Comment forcer l'affichage du clip pour chaque résultat ?

Papillon

12 réponses

stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
4 août 2008 à 05:37
tu veux dire que tu for ressemble a un truc du genre :

for(var i:Number=-1; i<1; i++) {
myClip.scaleX=i;
}

et tu voudrqis qfficher le clip a chaque passage de la boucle ? Si c'est le cas c'est impossible car flash attent d'avoir fini le code de la frame en cour avant d'afficher le resultat. Utilise plutot un Timer ou l'evenemet ENTERFRAME

@++
0
cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008
4 août 2008 à 10:23
Oui c'est exactement ca que je veux faire.
J'ai essayé avec un timer du style for(var t:1; t<10000; t++) mais la aussi, la pause ne se produit qu'en un bloc avant l'affichage final.
J'ai juste un problème avec enterFrame pour ralentir le clip et en sortir.
Je voulais justement eviter enterFrame aussi pour la surcharge memoire et faire tout en AS sur une seule frame, plutôt que d'utiliser des gotoAndPlay. Car je veux adapter cette fonction a plusieurs clip adjacent. (environ 100).

L'effet voulu est un peu comme quand on passe sa main sur les rouleaux de transport à la caisse d'un super marché. ;-) Ca tourne les uns après les autres et s'arrête pareil en ralentissant.

FlashyPapillon
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
4 août 2008 à 20:04
Salut, cette class te permet de faire tourner ton clip (Sprite) pendant 5s via un Timer. Il suffit de donner comme nom de liaison a ton clip mySprite et de faire dans ton code :
var clip:mySprite=new mySprite();
addChild(clip);

///////////////////
///////////////////

package {

import flash.display.Sprite;
import flash.utils.Timer;
import flash.events.TimerEvent;

public class mySprite extends Sprite {
//mySprite est le nom de la liaison de ton sprite

private var myTimer:Timer;
private var i:Number;
private var phase:Boolean;

public function mySprite {
phase=true;
i=-1;
myTimer=new Timer(100);
myTimer.addEventListener(TimerEvent.TIMER, update);
}

private function update(e:TimerEvent):void {
if(phase) {
if(i>1) {
phase=false;
}
else {
i+=0.02;
}
}
else {
if(!phase) {
if(i<-1) {
phase=true;
}
else {
i-=0.02;
}
}
}
scaleX=i;
if(myTimer.count==50) { //=5s
myTimer.removeEventListener(TimerEvent.TIMER, update);
myTimer=null;
}
}
}//fin class
}//fin package
}
////////////////////////
////////////////////////

@+++
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
4 août 2008 à 20:05
desole je sais pas pourquoi mais les sauts de ligne ne marchent pas...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008
5 août 2008 à 09:42
:-)
Je vais essayer cela, cela m'apprendra à travailler avec les class ;-)
Merci bcp

FlashyPapillon
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
5 août 2008 à 09:45
Salut,

par contre en relisant ton premier post je vois que tu parle de _xscale et non de scaleX, et donc d'AS2. L'exemple de class que je t'ais montre est en AS3.
Tu peut faire une class equivalente en AS2 mais la tu devras forcement utiliser l'Enterframe, car la class Timer n'existe pas en AS2.

@++
0
cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008
5 août 2008 à 09:49
N'ayant rien contre AS3 ;-) est-il possible d'y passer (upgrade ???) sous Flash MX ?

FlashyPapillon
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
5 août 2008 à 10:06
Non pas depuis Flash MX (flash version 6 ou 7 pour flash MX 2004)
L'apparition de l'AS3 dans l'IDE de Flash fue pour la version 9, c'est a dire Flash CS3.
Tu peux telecharger une version d'essais de 30 jours chez adobe.com...
Autrement, tu peux tres bien le faire en AS2 :)

Voici un exemple qui utilise un setInterval (similaire aux Timer de l'AS3) :

//////////////////////////////////////
class RotatingClip {
private var id:Number;
private var clip:Movieclip;
private var rotationNumber;
function rotationClip($clip:Movieclip) {
if(($clip==undefined)||($clip==null)) {
trace{"Erreur, clip non valide");
else {
clip=$clip;
rotationNumber=0;
id=setInterval(updateClip, 100); //toutes les 100ms
}
}//fin constructeur
private function updateClip():Void {
if(rotationNumber>10) {//on arrete apres 10 tours
clearInterval(id);
}
else {
if(Math.round(rotationNumber/2)==rotationNumber/2) {
//si c'est un nombre pair :
if(clip._xscale<100) {
clip._xscale+=0.5;
else {
rotationNumber++;
}
}
else { //nombre impair :
if(clip._xscale>0) {
clip._xscale-=0.5;
}
else {
rotationNumber++;
}
}//fin nombre impaire
}//fin on est dans les 10 premiers tours
}//fin function update
}//fin class
//////////////////////////////

Voila, sa devrais marcher, tu creer ton clip, tu lui donne un nom d'occurence, puis dans le code sur la frame ou le clip est tu met :

var myRotater=new RotatingClip(nomOccurenceClip);

En esperant que cette fois les saut de ligne marcherons (j'ai essayer une nouvelle technique! ^^), @+++

Stefbuet
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
5 août 2008 à 10:08
!!Les saut de ligne ne marchent toujours pas!!!
Mmm vivement que je rentre chez moi, je n'en peut plus de ce MAC!
0
cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008
5 août 2008 à 10:38
Ha les Mac,
Parfois j'me dis que je m'y mettrais qd m bien, a force d'attendre que le pc arrête de ramer.

thxs, la class ;-)

FlashyPapillon
0
stefbuet Messages postés 576 Date d'inscription mercredi 5 janvier 2005 Statut Membre Dernière intervention 12 mai 2009
5 août 2008 à 10:43
Si cela resoud ton probleme n'oublie pas de mettre ce post (de la class) en post resolu pour que les personne qui ont le meme probleme puissent trouver plus facilement de l'aide ;) @+++
0
cs_Papillonvole Messages postés 12 Date d'inscription mardi 17 décembre 2002 Statut Membre Dernière intervention 5 août 2008
5 août 2008 à 11:00
Sans problème.

Si ca fonctionne du premier coup, je le fais encore aujourd'hui, sinon faudra attendre 10 jours que je revienne de vacances.
;-)

FlashyPapillon
0
Rejoignez-nous