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 :

Loader dans un enfant


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 52
    Par défaut Loader dans un enfant
    Bonjour,

    Je suis confronté à un problème dont je n'ai pas entendu parler sur ce forum.

    Je charge une image dans un objet Loader, et lorsque je capte l'évenement Event.COMPLETE, j'instancie alors un MovieClip depuis la bibliothèque auquel j'ajoute le loader.
    Je mets le loader dans le MovieClip pour qu'il soit sensible à une animation de transparence.

    Hors, comportement bizzare, l'image ne s'affiche pas la première fois qu'elle est téléchargée. Par contre si elle est en cache, elle s'affiche.

    J'ai fait des logs (au premier chargement de l'image) et ce que je sais c'est que:
    - En regardant le nombre de bytes chargés, et la taille de l'image, celle-ci semble avoir été chargée.
    - Le conteneur dans lequel je mets le Loader semble être à plus de 1000 pixels du bord droit, au lieu de 150.
    - Si je me content de mettre l'image sur la scene, elle apparaît.

    Je n'arrive absolument pas a expliquer se fabuleux décalage vers la droite (non, non, on ne fait pas de politique ici...). Flash aurait il besoin que l'image soit quelques part sur la scene pour la charger et il la met au bout du monde pour ne pas la voir? Je suppose que non..

    Voici un bout de code:

    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    // >> Class MovieLoader
     
     
     
    /// Loads preview image
     
    public function loadPreview( imageURL:String, retry:Boolean = true )
     
    {
     
    	this.p_preview_loader = new Loader(); 
     
    	this.p_preview_loader.contentLoaderInfo.addEventListener( Event.COMPLETE, this.drawStartPage );
     
    	this.p_preview_loader.load( new URLRequest(imageURL) );
     
    }
     
     
     
    /// Displays a page when the loader is starting
     
    public function drawStartPage( event:Event = null)
     
    {
     
    	// Add start page
     
    	var page:StartPage = new StartPage( 	this.p_video_options.name,
     
    						this.p_video_options.chapterName,
     
    						this.p_style.pageBgColor, this.p_style.textColor,
     
    						this.p_style.buttonColor,
     
    						this.p_style.pageAlpha, this.p_style.buttonAlpha);
     
    	page.drawPreview(	this.p_preview_loader, 
     
    				this.stage.width);
     
    	this.changePage(page);
     
    }
     
     
     
    // ------------------------------------------------- //
     
     
     
    // >> Class StartPage
     
     
     
    /// Draws the preview image
     
    public function drawPreview(preview:DisplayObject, stageWidth:uint)
     
    {
     
    	this.Page.Image.addChild( preview ); // Image is a kinf of locator for the preview container
     
    	// Resize preview
     
    	var xmax:uint = stageWidth - (this.Page.Image.x * 2);
     
    	var ymax:uint = 220;
     
    	if( preview.width > xmax || preview.height > ymax )
     
    	{
     
    		if( preview.width > preview.height )
     
    		{
     
    			preview.height = xmax * preview.height / preview.width;
     
    			preview.width = xmax;
     
    		}
     
    		else
     
    		{
     
    			preview.width = ymax * preview.width / preview.height;
     
    			preview.height = ymax;
     
    		}
     
    	}
     
    	// Change preview position
     
    	preview.x = (xmax - preview.width)/2;
     
    	preview.y = (ymax - preview.height)/2;
     
    	this.computeTextPosition(preview);
     
    }

    J'ai retiré le superflu.

    Quelqu'un aurait t'il une idée?

    Merci!

  2. #2
    Membre Expert Avatar de Lorenzo77
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Par défaut
    ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var xmax:uint = stageWidth - (this.Page.Image.x * 2);
     
    preview.x = (xmax - preview.width)/2;
    mais sans tout le code difficile a dire ..

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 52
    Par défaut
    Bonjour Lorenzo,

    Effectivement, le plus évident ne m'est pas venu à l'esprit... Ma variable stageWidth provient de l'attribut width d'une instance de Stage. Hors ce dernier passe de 550 à plus de 2000 dès que les propriétés de l'image (taille etc...) sont accéssibles (événement init).
    Je ne sais pas du tout ce qu'il se passe à ce moment...

    Du coup, il faut utiliser stageWidth qui permet de récupérer la largeur effective occupée par le swf à l'écran (y compris les parties non visibles).

    C'est ça de développer en action script sans lire toute la doc...

    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Fichier HTML vide si noeud dans template enfant
    Par strat0 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/06/2007, 12h28
  2. Réponses: 4
    Dernier message: 20/04/2007, 12h05
  3. Appeler sql loader dans un script perl
    Par k6971 dans le forum Langage
    Réponses: 2
    Dernier message: 19/04/2007, 14h58
  4. Nom du fichier loader dans un clip
    Par charliejo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 03/01/2007, 17h32
  5. XML loader dans flash: comment ajouter un hyperlien?
    Par aspirin0 dans le forum Flash
    Réponses: 20
    Dernier message: 27/10/2006, 14h15

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