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 :

TextField : décalage entre l'affichage et la zone active


Sujet :

ActionScript 3

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Par défaut TextField : décalage entre l'affichage et la zone active
    Bonjour,

    J'ai l'habitude trouver la solution à mes problèmes mais là je suis tombé sur un os.

    J'ai créé un menu pour un site full flash mais j'ai un problème au niveau des événements de la souris. Mon menu est constitué de plusieurs TextField alignés. Le placement est correct. Ils sont bien alignés comme je le veux mais ils ne réagissent pas bien aux événements Mouse_Over et Mouse_Out. Lorsque je passe la souris dessus, ça n'a aucun effet. Par contre si je passe la souris environ 50-100 pixels en dessous, c'est le dernier TextField du menu qui réagit et uniquement celui-ci.

    Je ne sais pas si ça peut aider à trouver le problème mais voilà mon code pour l'affichage des TextField :

    for ( var j:int = 0 ; j < this._modele.interface2D.lesMenus[i].lesLiens.length ; j++ )
    {
    var nouveauLien:TextField = new TextField();
    nouveauLien.text = this._modele.interface2D.lesMenus[i].lesLiens[j].libelle.toUpperCase();
    nouveauLien.setTextFormat(this._formatMenu);
    nouveauLien.x = this._modele.interface2D.lesMenus[i].lesLiens[j].positionX;
    nouveauLien.y = this._modele.interface2D.lesMenus[i].lesLiens[j].positionY;
    this._lesLiens.push(nouveauLien);
    nouveauMenu.addChild(nouveauLien);
    }
    Et voici le code avec lequel j'active mes écouteurs :

    for( var i:int = 0 ; i < this._lesLiens.length ; i++ )
    {
    (TextField)(this._lesLiens[i]).addEventListener(MouseEvent.MOUSE_OVER,this._controleur.curseurDoigt);
    (TextField)(this._lesLiens[i]).addEventListener(MouseEvent.MOUSE_OVER,this._controleur.surlignerLien);
    }

    for( var i:int = 0 ; i < this._lesLiens.length ; i++ )
    {
    (TextField)(this._lesLiens[i]).addEventListener(MouseEvent.MOUSE_OUT,this._controleur.curseurMain);
    }
    Je ne sais pas si ça peut ça peut avoir un impact mais j'utilise aussi de la 3D avec Papervision dans la même scène.

    Si quelqu'un peut m'aiguiller pour résoudre ce problème, j'apprécierai énormément. Merci.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 2
    Par défaut
    Une bête erreur de ma part . Les Textfield lorsqu'ils sont créés en AS3 n'ont pas la taille exacte à laquelle correspond leur contenu. J'ajoutais le titre de mon menu en dernier et sa zone active couvrait celle des autres qui ne pouvaient donc pas recevoir d'événements de la souris.

    Pour ne pas avoir de problème, il vaut mieux redimensionner le TextField à l'aide de l'attribut autosize. Pour gérer les événements de la souris correctement, il faut ajouter le TextField à un Sprite et définir la hitArea de ce dernier. Si on n'effectue pas ce traitement, le Mouse_Over et le Mouse_Out ne réagissent que sur les pixels du texte ce qui n'est pas vraiment agréable pour l'utilisateur.

    Et voici ce que ça donne en code :

    for ( var j:int = 0 ; j < this._modele.interface2D.lesMenus[i].lesLiens.length ; j++ )
    {
    var nouveauLien:TextField = new TextField();
    nouveauLien.text = this._modele.interface2D.lesMenus[i].lesLiens[j].libelle.toUpperCase();
    nouveauLien.setTextFormat(this._formatMenu);
    nouveauLien.x = this._modele.interface2D.lesMenus[i].lesLiens[j].positionX;
    nouveauLien.y = this._modele.interface2D.lesMenus[i].lesLiens[j].positionY;
    nouveauLien.autoSize = flash.text.TextFieldAutoSize.LEFT;
    var largeurExacte:int = nouveauLien.width;
    var hauteurExacte:int = nouveauLien.height - (int)(this._formatMenu.leading);
    nouveauLien.autoSize = flash.text.TextFieldAutoSize.NONE;
    nouveauLien.width = largeurExacte;
    nouveauLien.height = hauteurExacte;

    var spriteConteneur:Sprite = new Sprite();
    var spriteHitArea:Sprite = new Sprite();
    spriteHitArea.graphics.beginFill(0x000000);
    spriteHitArea.graphics.drawRect(nouveauLien.x,nouveauLien.y,nouveauLien.width,nouveauLien.height);
    spriteHitArea.graphics.endFill();
    spriteConteneur.hitArea = spriteHitArea;
    spriteConteneur.buttonMode = true;
    spriteConteneur.addChild(nouveauLien);
    this._lesLiens.push(spriteConteneur);
    nouveauMenu.addChild(spriteConteneur);
    }

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

Discussions similaires

  1. décalage entre les affichages sur IE et firefox
    Par parano dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 13/01/2010, 21h46
  2. Réponses: 5
    Dernier message: 20/04/2006, 12h28
  3. Affichage dans une zone de texte.
    Par YLL dans le forum Access
    Réponses: 5
    Dernier message: 20/02/2006, 16h37
  4. Affichage d'une zone de texte au niveau du clic
    Par Aldur dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2005, 20h23

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