IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ActionScript 3 Discussion :

Load et Unload d'un SWF


Sujet :

ActionScript 3

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Load et Unload d'un SWF
    Bonjour !

    Je cherche à faire quelque chose d'assez simple (en tout cas en apparence) en AS3.

    J'ai deux fichiers SWF différents, qui représentent chacun une zone d'un jeu. Ce que je voudrais, c'est pouvoir passer d'une zone à l'autre en cliquant sur un bouton.

    Pour cela, j'ai ajouté au SWF de base (c'est-à-dire la première zone) le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    btn_01.addEventListener(MouseEvent.CLICK, onButtonClick);
     
    function onButtonClick(e:MouseEvent):void
    {
        var conteneur:Loader = new Loader();
        var image:URLRequest = new URLRequest("zone_02.swf");
        conteneur.load(image);
        this.addChild(conteneur);
    }
    Quand je clique sur le bouton, tout va bien, je passe à la zone suivante. J'ai mis le même code dans ce deuxième SWF pour pouvoir revenir dans la première zone.

    Mais je me suis vite rendu compte des limites de mon système : si je fais plusieurs allés-retours entre ces deux zones, elles vont se charger les unes par dessus les autres, et au bout d'un moment l'ordi va exploser...

    Donc, je cherche un moyen pour que ce système fonctionne. J'avais pensé à utiliser unloadAndStop(), mais comme mes deux fichiers SWF ont chacun un code différent, je ne sait pas comment l'utiliser.

    Des suggestions ? Il y a sans doute un moyen beaucoup plus simple de faire ce que je cherche à faire, mais étant plutôt débutant je ne le trouve pas.

    Merci d'avance !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut
    bonjour,
    j'ai des doutes sur ton raisonnement.

    1- il y a un cache , à par cas exceptionnels(comme l'ajout de date à la fin de l'url).
    Flash ne "recharge" donc pas un swf déja chargé précédemment.

    2- Il serais franchement simple de faire un cache toi même , pourquoi ne pas garder en mémoire les niveaux déjà charger et ne pas les retélécharger?

    3- A mon avis le problème vient plutôt de ton code, tu doit oublier de libéré des MovieClip, Sprite ou Bitmap voir swf(rien avoir avec le unload).

    Cordialement

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Il y avait sans doute en effet un problème de raisonnement (et de code je pense). J'ai repris tout depuis le début, et maintenant ça fonctionne : j'ai une zone principale et 4 zones secondaires que je charge dès le lancement du jeu. Après cela, je joue avec les addChild() pour afficher l'une ou l'autre des zones lors du clique d'un bouton.

    Quoi qu'il en soit, maintenant ça fonctionne très bien. Cependant, je suis curieux de savoir ce que tu entends par "faire un cache" et "libérer des MovieClip" ?

    Je ne m'y connais pas beaucoup, alors si tu peux éclairer un peu ma lanterne ce serait avec plaisir !

    Merci de ta réponse en tout cas.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 197
    Points : 89
    Points
    89
    Par défaut
    Bonjour,

    ok normalement il y a un cache qui est automatiquement utilisé en AS3.
    En gros si tu lui demande 2 fois de charger la même ressource "monImage.png" Flash ira chercher directement l'image dans le cache pour le second "load".
    Il existe peut être une fonction pour vider le cache mais je ne la connais pas. Perso je fais simplement "monImage.png?date=2013_02_01_12h_10s" --> problème résolu.

    L'idée de crée son cache sois même serais de faire de la programmation dynamique. Au lieu de charger toutes t'es zones au début (et faire un très long chargement ), tu pourrais charger la zones uniquement quand tu en as besoin. Pour cela tu as besoin de savoir si la zone n'a pas déja été chargé. Pour cela il suffit de faire un tableau de boolean et tu met à jour ton tableau suivant les chargement que tu fait.

    Mais des fois il ne faut pas chercher compliqué, surtout si tu es satisfait de ta méthode actuel.

    cordialement.

Discussions similaires

  1. [AS3] unload d'un .swf par lui-même
    Par krütbür dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 08/07/2014, 20h35
  2. load et unload
    Par khadija24 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 28/04/2007, 23h08
  3. [C#] Load et Unload assembly en c#
    Par PST dans le forum Windows Forms
    Réponses: 10
    Dernier message: 26/09/2005, 14h40
  4. [FLASH MX2004 PRO] DragAndDrop sur swf loadé
    Par nikita78 dans le forum Flash
    Réponses: 5
    Dernier message: 23/10/2004, 02h23
  5. Réponses: 3
    Dernier message: 01/12/2003, 13h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo