Aide - Recherche - Membres - Calendrier
Version complète : probleme de destroy
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Intégration 3D > Sandy
ChapF
Salut à tous.

J'ai un petit sousci, lorsque je supprime un transformgroup avec destroy(); j'ai une erreur à chaque frame lors du scene.render().

TypeError: Error #1009: Il est impossible d'accéder à la propriété ou à la méthode d'une référence d'objet nul.
at sandy.core.data::Polygon/clear()
at sandy.core.scenegraph::Camera3D/renderDisplayList()
at sandy.core::Scene3D/render()

J'aimerai savoir quelle est mon erreur, y a t-il autre chose à supprimer en meme temps, ou est-èce que je n'utilise pas du tout la bonne commande pour faire ceci... merci pour votre aide.
ChapF
C'est bon j'ai réglé le sousci, je pensais vraiment pas que sa changerai quelque chose :
en fait, je stock mes transformgroup dans des array pour pouvoir y accéder.

Lors de la création :

Action Script


var tg_contener:TransformGroup = new TransformGroup(id_tg_support.toString());
support_img_list[id_tg_support][0] = tg_contener;
tg_img.addChild(support_img_list[id_tg_support][0]);


et à la destruction :

Action Script

//support_img_list[instant_1][0].destroy(); donne des erreurs
tg_img.removeChildByName(instant_1.toString()); //pas d'erreurs, mais il faut donner un nom unique au tg.


Petite question : Tout est bien supprimé de la mémoire de cette maniere?
ChapF
J'ai bien l'impression que non, mon animation accueil des images (beaucoup, elles sont chargé à la volé) et je garde en memoires les bitmadata des miniatures des images (150*100), l'image entiere (1500*1000) est chargé à la selection de l'utilisateur et ensuite déchargé à la selection d'une autre image ou changement de page. Les images sont sur des plane3D situé dans des transformgroup (car il y un autre objet qui est lié à l'image) qui eux meme sont organisé dans un transformgroup principal.
j'ai x image sur une page, et j'ai un bouton pour changer de page, ce bouton supprime tous les transformgroups d'ou : tg_img.removeChildByName(instant_1.toString()), et les recrée ensuite avec les images suivantes.
Sachant
- Que de toute maniere, toutes les miniatures sont en memoire que l'on change ou non de page.
- Que lorsque je reste sur la page 1, tout reste très fluide.
- Que plus je change de page et plus la chute en fps est ennorme (que j'avance dans les page ou que je swap page 1-page 2-page 1-page 2).

Je pense qu'il faut que je trouve un moyen de supprimer tout les contenus 3D de la memoire, mais je ne trouve pas comment faire.
Logic
Salut.

Fais une recherche dans la section AS3, la destruction d'objet (qui est un mythe) a été discutée, expliquée et re-expliquée.

D'un autre coté, la chute de FPS n'est pas forcément due à une mémoire qui gonfle. Et as-tu monitoré la mémoire utilisée par ton appli ? La classe flash.system.System a une propriété totalMemory, n'hésites pas à l'utiliser.
ChapF
Citation
D'un autre coté, la chute de FPS n'est pas forcément due à une mémoire qui gonfle.

Oui c'est surtout sa qui m'inquiète, en fait j'aimerai savoir si après une telle commande "removeChildByName", Sandy ne continu pas a faire les calculs pour mes objet qui ne sont pourtant plus visible.
Sinon oui mon application gonfle en mémoire lorsque je change de page, après l'affichage de la première page(au début) l'application pèse 32.7 Mo, et en pèse 149.3 après 30 changements de page. Je vais jeter un œil dans la section AS3, mais je ne pense pas que la chute de fps soit due à l'utilisation mémoire (150 MO c'est pas énorme).
Merci de ta réponse.
ChapF
Désolé je n'ai pu éditer mon post...

Je vien de faire quelques tests :
Si j' affiche toutes les images sur la page 1 Utilisation Mémoire : 66 MO.
Si j'affiche 20 images par page :
A la premiere page chargé j'ai 35 MO.
Et une fois toutes les pages défilé, sur la derniere page (20 images aussi), j'ai 53 MO.
J'en déduit donc qu'il y a bien des chose qui sont supprimées mais pas tout, il faut que je retombe à 35 sinon le script n'est pas stable. Je vais jeter un œil dans la section AS3 voir si je trouve mon bonheur. Si quelqu'un est déjà tombé sur une page qui pourrai m'aider merci de poster le lien smile.gif Merci.
Logic
Citation (ChapF @ Nov 21 2008, 08:56 PM) *
il faut que je retombe à 35 sinon le script n'est pas stable


Faux, archi-faux.

Le garbage-collector passe quand il veut, quand il a envie, selon ses petits désirs et caprices. Tu peux très bien monter en mémoire, monter... puis d'un coup retomber sans raison, et sans forcément atteindre le niveau que tu espérais.

Il faut voir ça de manière globale. Testes ton appli sur une longue utilisation et regardes la mémoire utilisée. Si ça redescend de temps en temps et que ça reste globalement stable, alors c'est bon. Par contre si tu vois que ça monte, ça monte... et que ça redescend jamais, là tu as un problème !
kiroukou
Il y a en effet des fuites de mémoires dans Sandy.
J'ai tenté d'en corriger la plus grande partie avec la version 3.1 RC1.

Mais d'une manière plus générale, il faut penser à détruire le material de l'objet qui n'est plus utilisé.
Car si l'objet lui tu n'en veux plus, la texture elle, peut etre partagée avec un autre objet, ou bien conservée en mémoire pour une utilisation ultérieure.
Pense donc à bien supprimer les textures liées à l'objet lui meme.

Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.