J’ai un petit souci avec le tuto
je l'ai testé sa demarre pas mal
j'ai placé un masque temporaire sur les vignettes le temps du chargement, c'est bon!
Depuis un menu j’affiche plusieurs diapos les un après les autres
et la j'ai un gros problème
Le problème est que l’osrque je quitte le premier diapo je n’arrive pas à libérer la mémoire
Au niveau des vignettes
For (var i:int =0 ; i< xmlList.length());i++){
delete Liste_vignette.getChildAt(i); // ne libère pas la mem
System.gc(); // ne libère pas la mem
_spList.removeChildAt(i); // ne libère pas la mem non plus
}
Comment supprimer les xxxx.addEventListener(MouseEvent.
Puisque les objets ne sont identifiés que à ma connaissance par « getChildAt(i) »
sans vouloir être vexant, il y a déjà mieux sur le site ... il suffit de regarder les sources déjà dispo ici qui sont moins bugguées et plus fonctionnelles.
@Orange73:
ton code est crade:
-Tu oublis d'efface le background avant de le re-dessiner ce qui va prendre de plus en plus de mémoire et charger le CPU pour l'affichage inutilement.
-Tu ajoute un child à la scène à chaque redimentionnement alors qu'il ne faut l'ajouter qu'une fois.
-La même chose peut tenir avec 1 fonction en moins.
" 1/ "j'ai déjà réalisé l'affichage des images avec l'outil Bitmap."..
ou vois-tu cela dans ta source ? "
J'ai dis que j'avais fait ça, mais en aucun cas j'ai dit que je l'avais ajouté dans la source, ce que je n'ait pas fait justement car ce n'est pas encore tout à fait au point.
1/ "j'ai déjà réalisé l'affichage des images avec l'outil Bitmap."..
ou vois-tu cela dans ta source ?
2/ Tu aurais pu faire une classe ou fonction qui permettrai de addchilder le bitmap de la biblio afin de faire un background propre qui prend toute la scene meme en redimensionnant. je suis gentil, voici un exemple :) :
Quand aux autres, merci pour vos conseils, j'ai déjà réalisé l'affichage des images avec l'outil Bitmap.
Pour le bug que tu disais Pèg', il se fait lorsqu'on applique deux TweenLite sur les mêmes objets, à part enlever un des deux TweenLite, je ne vois pas comment corriger cela, mais j'y réflechi =).
Comme le dit Peg', pourquoi dans ta fonction affichImage(); tu recreer un loader pour chaque images car :
1/ tu les a déjà chargées a la base en full size.
2/ tu recrée un loader pour chaque image alors que tu dois en afficher qu'une seule...
Sinon il serait bien de creer une fonction dispose(); afin de supprimer toutes les references et ainsi permettre aux users de l'integrer dans leurs sites flash...
Il y a un énorme bug lors de l'arrivée des photos si la souris se trouve sur la ligne : les photos se bloquent et un énorme décalage avec superposition se fait ...
Tu Crées autant de Loader qu'il y a d'images, or il n'y a pas de miniatures dans tes images, ce qui veut dire que tu as déjà chargé les images grandes tailles dans un loader que tu as affiché dans une vignette en bas de l'écran. Pourquoi les recharges-tu au lieu de les afficher tout simplement ?
Tu doubles l'espace mémoire utilisé inutilement sans parler du temps de chargement et de la démultiplication des évènements à gérer.
Sinon niveau structurel, mise à part la classe "Main.as" qui contient tout, il n'y a pas grand choses à dire.
On sent encore les restes d'AS2, le code est trop linéaire et tu n'utilises pas assez les classes custom pour profiter de leurs puissance. C'est de l'évènementiel, pas vraiment de la POO ... dommage.
Et encore une fois, l'utilisation de la classe TweenLite n'est pas justifiée ici, tu aurais pu simplement utiliser celle dispo déjà dans Flash.
Ce que tu pourrais faire :
- Placer toutes tes données de base (taille d'image max, vignette, etc ...) dans le XML, ce qui rendrait la galerie bien plus dynamique
- Créer une classe statique permettant de gérer le données du xml et de transmettre les infos données, ainsi qu'une classe statis qui chargerait les images.
- Charger les images une par une dans un Array/Vector. et les appeler quand tu en as besoin pour les afficher en grand à partir de la classe statique précédemment citée.
- Créer de vrais vignettes bitmap avec l'outil Matrix afin de ne pas avoir à déplacer des dizaines d'images en 800x600 réduites, ce qui lacherais un peu de CPU.
- La gestion de la taille de l'animation pour afficher/placer tes images/vignettes aurait aussi été un plus, car tout le monde n'a pas forcément envie d'utiliser une galerie de 900x700. Un mode Rezise en temps réel pourrait aussi être sympa.
C'est une bonne approche de l'AS3 et tu as bien compris les principes d'évènements. Reste maintenant à vraiment tirer partie de toute la puissance dispo en AS3 et de voir à bien gérer tout ça.
17 janv. 2010 à 12:05
J’ai un petit souci avec le tuto
je l'ai testé sa demarre pas mal
j'ai placé un masque temporaire sur les vignettes le temps du chargement, c'est bon!
Depuis un menu j’affiche plusieurs diapos les un après les autres
et la j'ai un gros problème
Le problème est que l’osrque je quitte le premier diapo je n’arrive pas à libérer la mémoire
Au niveau des vignettes
For (var i:int =0 ; i< xmlList.length());i++){
delete Liste_vignette.getChildAt(i); // ne libère pas la mem
System.gc(); // ne libère pas la mem
_spList.removeChildAt(i); // ne libère pas la mem non plus
}
Comment supprimer les xxxx.addEventListener(MouseEvent.
Puisque les objets ne sont identifiés que à ma connaissance par « getChildAt(i) »
A bientôt.
Merci de vos réponses.
Guardian
27 oct. 2009 à 01:45
Peg'
26 oct. 2009 à 21:58
On attend !!!
Merci pour ta source en tous cas
4 août 2009 à 10:28
24 juil. 2009 à 20:28
ton code est crade:
-Tu oublis d'efface le background avant de le re-dessiner ce qui va prendre de plus en plus de mémoire et charger le CPU pour l'affichage inutilement.
-Tu ajoute un child à la scène à chaque redimentionnement alors qu'il ne faut l'ajouter qu'une fois.
-La même chose peut tenir avec 1 fonction en moins.
----->
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
function tileBG(e:Event):void{
var g:Graphics=title.graphics;
g.clear();
g.beginBitmapFill(new Pattern(0, 0));
g.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
g.endFill();
}
addChild(tile);
tileBG(null);
stage.addEventListener(Event.RESIZE, titleBG);
---------------
Stef