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

Flash Discussion :

AS3 : recuperer la taille de Stage sans référence


Sujet :

Flash

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut AS3 : recuperer la taille de Stage sans référence
    salut les gars,

    j'ai fait une classe Chargeur qui étend flash.display.Loader, dans le constructeur de cette classe j'ai essayé pendant X jours de recuperer la taille du Stage sans avoir une référence a un clip ou objet placé sur ce Stage et j'ai trouvé que c'était impossible ...
    tous les :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Stage.width
    Stage.stageWidth
    stage.width
    stage.stageWidth
    renvoient null si je ne passe pas par un objet (clip/sprite/...) posé sur la scene ou n'importe ou dans la DisplayList, vous confirmez ce comportement ?

    merci

    je suis donc obligé d'avoir un paramètre supplémentaire sur le constructeur de ma classe qui fait référence a un clip posé sur le Stage et c'est seulement a ce moment que je peux connaitre la taille du stage en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this._mcCible.stage.stageWidth
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 169
    Points
    169
    Par défaut
    Salut

    Ca me parait pas logique !

    En AS3 je sais pas mais en AS2 , un Stage.width , fonctionne sans problème

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    salut,

    je sais que Stage.width fonctionne en AS2, la question c'est son comportement en AS3
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 169
    Points
    169
    Par défaut
    et ca te renvoit quoi? une erreur ou rien du tout?

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    NULL donc une erreur ...


    voici un exemple de classe :

    Code : 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
    package test{
     
    	import flash.display.MovieClip;
    	import flash.display.Stage;
     
     
    	public class Test {
     
    		public function Test(){
    			trace(Stage.width);
    			trace(stage.width);
    			trace(Stage.stageWidth);
    			trace(stage.stageWidth);
    		}
    	}
    }
    si dans l'IDE je déclare ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import test.Test;
     
    tt:Test = new Test();

    voici les erreurs :
    1119: Accès à la propriété width peut-être non définie, via la référence de type static Class.
    1120: Accès à la propriété non définie stage.
    1119: Accès à la propriété stageWidth peut-être non définie, via la référence de type static Class.
    1120: Accès à la propriété non définie stage.


    je sais que stage existe (est non NULL) des que l'objet et placé dans la DisplayList par contre Stage devrait être accessible de n'importe ou
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 169
    Points
    169
    Par défaut
    Alors je viens de tester.
    J ai créé un .fla vide avec juste ce code (et rien d autre, pas de Mc...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trace(stage.stageWidth);
    et ca me donne bien en sortie la largeur de ma scene

    Je suis pas sûr de saisir la différence entre stage et Stage

  7. #7
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Bonjour,

    Citation Envoyé par Lorenzo77 Voir le message
    je sais que stage existe (est non NULL) des que l'objet et placé dans la DisplayList par contre Stage devrait être accessible de n'importe ou
    je vois pas comment une classe pourrait récupérer le stage sans être liée à une appli.

    par exemple une classe métier utilisée par plusieurs applis ne pourrait pas renvoyer plusieurs stage.

    --

    L'objet stage n'est accessible que lorsque l'objet a reçut l'évènement ADDED_TO_STAGE.

    tant que l'objet n'est pas ajouté à la liste d'affichage l'objet stage renvoi null.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    oui, mais la classe Stage contrairement a stage est bien unique et global et normalement non lié a un quelconque objet de la DislpayList vu ce que j'ai pu en lire dans la DOC, donc pourquoi les propriétés de Stage (width et stageWidth) renvoit NULL en toute occasion ?


    si c'est "normal" alors ca veut dire qu'il est impossible en AS3 de recuperer la taille de la scene sans une référence a un de ces enfants comme on pouvait le faire en AS2
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  9. #9
    Rédacteur/Modérateur
    Avatar de beekeep
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 2 005
    Points : 3 325
    Points
    3 325
    Par défaut
    Citation Envoyé par Lorenzo77
    stage est bien unique et global et normalement non lié a un quelconque objet de la DislpayList vu ce que j'ai pu en lire dans la DOC
    d'après ce que je vois ce n'est pas le cas :
    Citation Envoyé par http://help.adobe.com/fr_FR/AS3LCR/Flash_10.0/flash/display/Stage.html
    .

    Il est impossible d'accéder globalement à l'objet Stage.

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    merde c'est con cette histoire ... merci
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

  11. #11
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Il me semble qu'une solution existe. Rends toi sur pratiqueactionscript3, et regarde à partir de la page 448...
    Je n'ai pas testé, mais apparemment cette méthode rendrait l'objet Stage accessible à n'importe quelle autre classe. Je te reproduis la page 452.
    Code : 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
     
    package org.bytearray.abstrait { 
     
     import flash.display.MovieClip; 
     import flash.events.Event; 
     import flash.display.Stage; 
     
     public class ApplicationDefaut extends MovieClip { 
      // point d'accès à l'objet Stage 
      public static var GLOBAL_STAGE:Stage; 
      // propriété permettant l’exécution de la fonction de rappel 
      private var rappel:Function; 
     
      public function ApplicationDefaut () { 
     
       // affecte une référence à l'objet Stage 
       ApplicationDefaut.GLOBAL_STAGE = stage; 
     
      } 
     
      // méthode de déplacement de la tête de lecture personnalisé 
      public function myGotoAndStop ( pImage:int, pFonction:Function ):void { 
     
       // écoute de l'événement Event.RENDER
       addEventListener ( Event.RENDER, miseAJour ); 
     
       // déplacement de la tête de lecture 
       gotoAndStop ( pImage ); 
     
       // retourne un objet permettant  
       rappel = pFonction; 
     
       // force la diffusion de l'événement Event.RENDER 
       stage.invalidate(); 
     
      } 
     
      private function miseAJour ( pEvt:Event ):void{ 
     
       // nous tentons d'appeler la fonction de rappel 
       try { 
     
        rappel(); 
     
       // si cela échoue, nous affichons un message d'erreur 
       } catch ( pErreur:Error ) { 
     
        trace("Erreur : La méthode de rappel n'a pas été définie"); 
     
       // dans tout les cas, nous supprimons l'écoute de l'événement 
    Event.RENDER 
       } finally { 
        removeEventListener ( Event.RENDER, miseAJour ); 
       }  
      } 
     } 
    }
    Seul la première partie du code t'intéressera.
    Ensuite, il te suffit de faire un import et à la place de tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.GLOBAL_STAGE
    .

    Encore une fois, j'ai pas testé...

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 472
    Points : 1 537
    Points
    1 537
    Par défaut
    salut,

    le site en question ne fonctionne pas en ce moment, mais le code est trés bizarre dans tous les cas ...

    j'ai testé mais plante sur le invalidate()
    Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
    Mon blog : http://web.codeur.free.fr

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

Discussions similaires

  1. Inclusion de sous-rapport sans référence externe
    Par le--handballeur dans le forum iReport
    Réponses: 6
    Dernier message: 02/08/2006, 18h26
  2. [JSP] Récupérer la langue du navigateur sans js
    Par Snivel dans le forum Struts 1
    Réponses: 2
    Dernier message: 31/03/2006, 17h56
  3. href sans référence
    Par Daeron dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 10/11/2004, 11h02
  4. [VB6] [Réseau] Récupérer la taille d'un fichier avec inet
    Par pcpunch dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 20/02/2003, 21h38
  5. [VB6] [Fichier] Récupérer sa taille
    Par SpP dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/09/2002, 19h56

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