Vous n'êtes pas connecté - 2 Membres connectés
Catégories
Graphisme
Flash (49)
Print (65)
Programmation
PHP (64)
ASP (2)
Action Script (25)
CSS (25)
Hardware
PC (34)
Mac (14)
Linux (5)
Divers
Blabla (249)
906 Sujets
12090 Réponses
Programmation > Action Script > Pb avec onClipEvent
Pb avec onClipEvent
Bonjour !

Je développe actuellement un site en flash et je rencontre un problème de ralentissement dû je pense aux nombreux clips gérés avec des onClipEvent(enterFrame).

Je m'explique...

Il n'y a pas beaucoup d'animations simultanées sur le site mais une bonne partie des clips affichés sont gérés en actionscript pour réagir en cas de survol, de clic etc...
Résultat... pas mal de code à interpréter à chaque image et de fait un ralentissement de l'animation.

Comment améliorer cela ?... Comment procédez-vous ?

D'avance merci.

PS : Un bon exemple en appui est je pense le bienvenu : oukongo.com

C'est encore en chantier !
Seule rubrique visible : Jeunes / Nos métiers
Posté le 04 09 2006 à 13h44
askhanir - Membre - www

Réponses - Pb avec onClipEvent
<< 1 2 >>
Deja en mettant un lien valide ^^

oukongo.com
Posté le 04 09 2006 à 13h47
Narno - Modérateur - www
oh la vache tu ma fais bugguer mon firefox
(p4 3ghz, 1go de ram...)
Posté le 04 09 2006 à 13h48
Narno - Modérateur - www
Promis, je ne le ferai plus ô grand modérateur.
Posté le 04 09 2006 à 13h48
askhanir - Membre - www
de quoi ?? bugguer mon Firefox ? j'epsere bien ^^
Posté le 04 09 2006 à 13h49
Narno - Modérateur - www
 Détruire les onEnterFrame quand plus besoin ? Les relancer quand l'utilisateur le demande ?

Exemple pour un clip sur la scène du nom de "my_mc" ?

// ---
my_mc.destX = 10;
my_mc.vitesse = 2;
// ---
MovieClip.prototype.moveLeClip = function() {
    this.onEnterFrame = function() {
        trace("my_mc.onEnterFrame");
        this._x += (this.destX-this._x)/this.vitesse;
        if (Math.round(this._x-this.destX) == 0) {
            trace("delete my_mc.onEnterFrame : "+(this._x-this.destX));
            delete this.onEnterFrame;
        }
    };
};
// ---
my_mc.onRelease = function() {
    trace("my_mc.onRelease");
    this.destX += 100;
    this.moveLeClip();
};
// ---
Autre méthode. Plutot que d'executer ton code a chaque frame pour rien, voit du coté de "setInterval". Au passage, très sympa ce ptit site ^^
Posté le 04 09 2006 à 14h00
cob - Membre
 cob > je me disais également que passer au maximum par l'utilisation des prototypes pouvait être une bonne chose.

Je me penche sur la question car certains clips sont en veille permanente, attendant la modification d'une variable pour bouger alors que l'on pourrait tout simplement demander le mouvement à un moment donné. Bref... j'me comprends.

Voici un exemple de code utilisé et à mon avis responsable du ralentissement :

Pour un menu apparaissant en haut à droite :

onClipEvent(load) {
    this._visible=false;
    desty=this._y=360-this._height;
    k = 0.2;
    f = 0.6;
    vx = vy = 0; 
}

onClipEvent(enterFrame) {
    this._visible=true;
    ay = k*(desty - this._y);
    vy += ay;
    vy *= f;
    this._y += vy;
}
A tout instant, si je modifie la variable desty, cela déplace le clip jusqu'à sa nouvelle position avec un mouvement élastique.
Posté le 04 09 2006 à 14h15
askhanir - Membre - www
 Tu ferais pt-etre mieux de placer ton code dans la timeline. Hachement plus mieux controlable.
Ensuite, vi, les prototypes se révelent trés pratique. En particulier quand differents clips utilisent un même bout de procédure (ici le déplacement).

En AS (commen en JS d'ailleurs) tu peut surveiller une variable. Regarde dans le manuel à : "watch".


// ---
my_mc.destX = 10;
my_mc.vitesse = 2;
// ---
MovieClip.prototype.moveLeClip = function(prop, oldVal, newVal, userData) {
    trace("MovieClip.prototype.moveLeClip("+prop+", "+oldVal+", "+newVal+", "+userData+")");
    this.onEnterFrame = function() {
        // trace("my_mc.onEnterFrame");
        this._x += (this.destX-this._x)/this.vitesse;
        if (Math.round(this._x-this.destX) == 0) {
            trace("delete my_mc.onEnterFrame : "+(this._x-this.destX));
            delete this.onEnterFrame;
        }
    };
    return newVal;
};
// ---
my_mc.onRelease = function() {
    trace("my_mc.onRelease");
    this.destX += 100;
    // this.moveLeClip(); // Plus la peine d'appeler cette methode. destX etant surveiller par un "Listener"
};
// ---
// Exemple. Un deuxieme clip qui n'a rien a voir avec le premier. Ici on modifie la variable destX du premier. Grace au watcher, l'appli sait qu'elle doit appeler la fonction "moveLeClip"
second_mc.onRelease = function() {
    trace("second_mc.onRelease");
    my_mc.destX += 100;
};
// ---
my_mc.watch("destX", moveLeClip, "Data envoyee");
Posté le 04 09 2006 à 14h51
cob - Membre
Je ne connaissais pas watch... c'est costaud ce truc là !

J'ai donc remanié certains clip au niveau de l'AS et déjà il y a un mieux quand à la vitesse de l'animation.

Merci pour la leçon cob ! Clap Clap Clap
Posté le 04 09 2006 à 16h19
askhanir - Membre - www
A vot' service mon bon monsieur ^^
Posté le 04 09 2006 à 16h26
cob - Membre
onClipEvent() est obsoléte si je ne m'abuse
Posté le 04 09 2006 à 22h52
RGSONE - Membre - www
<< 1 2 >>
Sujets Action Script
<< 1 2 3 >>
[Flash] Pop-up (...)
Auteur : gom
Posté le 18 09 2007 à 10h15
15 Réponses (Nouveau sujet)
Sujet visité 1383 fois
Chiffrement data (...)
Auteur : cob
Posté le 06 08 2007 à 17h16
4 Réponses (Nouveau sujet)
Sujet visité 741 fois
flash action script
Auteur : mimo
Posté le 06 07 2007 à 16h48
6 Réponses (Nouveau sujet)
Sujet visité 927 fois
smellyFly (...)
Auteur : ton1K
Posté le 30 05 2007 à 21h08
22 Réponses (Nouveau sujet)
Sujet visité 1448 fois
Attacher des (...)
Auteur : Pierrot
Posté le 12 03 2007 à 16h20
8 Réponses (Nouveau sujet)
Sujet visité 858 fois
PB champ de texte (...)
Auteur : askhanir
Posté le 04 03 2007 à 08h21
8 Réponses (Nouveau sujet)
Sujet visité 1383 fois
menu 2.0
Auteur : veensez
Posté le 25 12 2006 à 20h18
26 Réponses (Nouveau sujet)
Sujet visité 1454 fois
Flash - loadmovie (...)
Auteur : Ramastom
Posté le 06 11 2006 à 16h21
9 Réponses (Nouveau sujet)
Sujet visité 1100 fois
Directives globales
Auteur : tyler
Posté le 10 10 2006 à 21h00
8 Réponses (Nouveau sujet)
Sujet visité 595 fois
Panier flash
Auteur : Guiant
Posté le 08 10 2006 à 22h33
7 Réponses (Nouveau sujet)
Sujet visité 1526 fois
<< 1 2 3 >>
Mentions légales   -   Crédits   -   Nous contacter   -   © Benzor 2006