Forums Développement Multimédia

Aller au contenu

chriss27

Inscrit(e) (le) 03 Feb 2019
Déconnecté Dernière activité hier, 09:56 AM
-----

Sujets que j'ai initiés

texte qui s'étire dans un movieClip

03 February 2019 - 18:21 PM

Bonjour.
Autodidacte en programmation , j'ai créé une application de chat .
tout fonctionne , sauf une chose : lors du redimensionnement de mon stage , l'écriture s'écrase ou s'étire . Qui plus est , la police du message suivant est plus grande qu'elle ne devrait l'être , et se redimensionne seulement si on resize .
Petite précision : mon texte est créé dans un movieClip ( j'ai besoin du buttonMode ;-)) , et ma fonction s'inspire du livre de Thibault Imbert , gestion des émoticones .
J'ai essayé de modifier la police proportionnelement au scale du parent , mais ça ne résoud pas le soucis .
Je vous confie mes fonctions qui gèrent l'écriture .
la fonction principale :

  public function addText( result:Object):void {
   //lignes = new Array();
   lignes.push(result);
 
   var formatTexte:ElementFormat = new ElementFormat();
   var _bold:String = "";
   var _italic:String = "";
   if(result["message"]["bold"]==true){
        _bold = "bold";
   }
   else {
        _bold = "normal";
   }
   if (result["message"]["italic"] == true) {
        _italic = "italic";
   }
   else {
        _italic = "normal";
   }
   var descriptionPolice:FontDescription = new FontDescription(result["message"]["font"],_bold,_italic);
   descriptionPolice.locked = false;
   formatTexte.fontDescription = descriptionPolice;
   formatTexte.fontSize = result["message"]["size"];
   formatTexte.color = result["message"]["color"];
   ligneTexte = new Ligne(formatTexte, _composeWidth);
   ligneTexte.x = 0;
   ligneTexte.y = tailleTexteActuel;
   this.container.addChild(ligneTexte);
   ligneTexte.sender = result["username"];
   ligneTexte.text =result["username"]+" : "+ result["text"];
   tailleTexteActuel += ligneTexte.height;
 
   trace("le conteneur contient " + container.numChildren + " lignes ");
   trace( " la taille du texte actuel est = " + tailleTexteActuel);
   showScrollbar();
   ajusteLaHauteur();
  }
  public function onResize(newWidth:Number, newHeight:Number):void
  {
   if(largeur!=newWidth) {
        trace("on redimensionne la largeur du chat");
        while (container.numChildren > 0)
        {
         container.removeChildAt(0);
        }
        tailleTexteActuel = 0;
        //getContainerBounds();
 
        for (var i:int = 0; i < lignes.length; i++ )
        {
         var item:Object = lignes[i];
         var formatTexte:ElementFormat = new ElementFormat();
         var _bold:String = "";
         var _italic:String = "";
         if(item["message"]["bold"]==true){
          _bold = "bold";
         }
         else {
          _bold = "normal";
         }
         if (item["message"]["italic"] == true) {
          _italic = "italic";
         }
         else {
          _italic = "normal";
         }
         var taillePolice:Number = item["message"]["size"];
         var taille:Number = 0;
         if (taillePolice >= taillePolice / this.parent.scaleX){
          taille = taillePolice;
         }
         if (taillePolice < taillePolice / this.parent.scaleX){
          taille = Math.round(taillePolice / this.parent.scaleX);
         }
         var descriptionPolice:FontDescription = new FontDescription(item["message"]["font"],_bold,_italic);
         descriptionPolice.locked = false;
         formatTexte.fontDescription = descriptionPolice;
         formatTexte.fontSize = taille;
         //formatTexte.fontSize = taillePolice;
         trace("taille police = "+Math.round(taillePolice / this.parent.scaleX));
         formatTexte.color = item["message"]["color"];
         ligneTexte = new Ligne(formatTexte, _composeWidth);
         ligneTexte.x = 0;
         ligneTexte.y = tailleTexteActuel;
         this.container.addChild(ligneTexte);
         ligneTexte.sender = item["username"];
         ligneTexte.text =item["username"]+" : "+ item["text"];
         tailleTexteActuel += ligneTexte.height;
       
         if (item["message"]["action"] == "" || item["message"]["action"] == undefined) {
         }
         largeur = newWidth;
         showScrollbar();
        }
   }
 
   if (hauteur != newHeight){
        trace("on redimensionne la hauteur du chat");
        while (container.numChildren > 0)
        {
         container.removeChildAt(0);
        }
        tailleTexteActuel = 0;
        //getContainerBounds();
 
        for (var i:int = 0; i < lignes.length; i++ )
        {
         var item:Object = lignes[i];
         var formatTexte:ElementFormat = new ElementFormat();
         var _bold:String = "";
         var _italic:String = "";
         if(item["message"]["bold"]==true){
          _bold = "bold";
         }
         else {
          _bold = "normal";
         }
         if (item["message"]["italic"] == true) {
          _italic = "italic";
         }
         else {
          _italic = "normal";
         }
         var taillePolice:Number = item["message"]["size"];
         var taillePolice:Number = item["message"]["size"];
         var taille:Number = 0;
         if (taillePolice >= taillePolice / this.parent.scaleY){
          taille = taillePolice;
         }
         if (taillePolice < taillePolice / this.parent.scaleY){
          taille = Math.round(taillePolice / this.parent.scaleY);
         }
         var descriptionPolice:FontDescription = new FontDescription(item["message"]["font"],_bold,_italic);
         descriptionPolice.locked = false;
         formatTexte.fontDescription = descriptionPolice;
         formatTexte.fontSize = taille;
         trace("taille police = "+taillePolice / this.parent.scaleY);
         formatTexte.color = item["message"]["color"];
         ligneTexte = new Ligne(formatTexte, _composeWidth);
         ligneTexte.x = 0;
         ligneTexte.y = tailleTexteActuel;
         this.container.addChild(ligneTexte);
         ligneTexte.sender = item["username"];
         ligneTexte.text =item["username"]+" : "+ item["text"];
         tailleTexteActuel += ligneTexte.height;
       
         if (item["message"]["action"] == "" || item["message"]["action"] == undefined) {
         }
         hauteur = newHeight;
         showScrollbar();
        }
   }
 
  }
 

le movieClip qui contient le texte (classe Ligne )

package ui.utils {

import flash.display.DisplayObject;
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldType;
import flash.text.engine.ElementFormat;
import flash.text.engine.ContentElement;
import flash.text.engine.GraphicElement;
import flash.text.engine.GroupElement;
import flash.text.engine.TextBlock;
import flash.text.engine.TextElement;
import flash.text.engine.TextLine;
import flash.utils.getDefinitionByName;
import flash.utils.Dictionary;

public class Ligne extends MovieClip {

  private var contenu:String;
  private var tabContenu:Array = new Array();
  private var vecteurGroup:Vector.<ContentElement>=new Vector.<ContentElement>();
  private var elementTexte:TextElement;
  private var elementGraphique:GraphicElement;
  private var element:ContentElement;
  private var groupeElement:GroupElement = new GroupElement();
  private var texteBloc:TextBlock = new TextBlock();
  private var emoticone:MovieClip;
  public var formatage:ElementFormat;
  public var smileys:Dictionary;
  public var largeur:Number = 0;
  private var reg:RegExp=/(\(a\)|\(bf\)|:kill...)/g;
  public var _color:uint;
  public var _italic:Boolean = false;
  public var _bold:Boolean = false;
  public var _font:String = "Tahoma";
  private var _fSize:uint = 12;
  public var sender:String = "";
  private const X_OFFSET:uint = 1;
  private const Y_OFFSET:uint = 1;
  private var supportTexte:Sprite;

  public function Ligne(pFormat:ElementFormat, _largeur:Number) {
   super();
   smileys = new Dictionary();
   smileys["(a)"] = "Angel";
   smileys["(bf)"] = "Baff2";
   smileys[":kill"] = "BangBang";
...
   formatage = pFormat;
   largeur = _largeur;
   addEventListener(Event.ADDED_TO_STAGE, addedToStage);
  }


  private function addedToStage(e:Event):void
  {
   removeEventListener(Event.ADDED_TO_STAGE, addedToStage);
   this.scaleX = this.scaleY = 1;
   this.buttonMode = true;
   this.addEventListener(MouseEvent.CLICK, this_click);
  }


  private function this_click(e:MouseEvent):void
  {
   PublicMessage.getInstance().onUserSelect(sender);
  }

  public function set text(_contenu:String):void
  {
   contenu = _contenu;
   rendu();
  }

  public function get text():String
  {
   return contenu;
  }

  private function rendu():void
  {
   //trace("rendu de la cellule");
   while (this.numChildren > 0)
   {
        removeChildAt(0);
   }
 
   tabContenu = contenu.split(reg);
   var lng:int = tabContenu.length;
   var currentString:String;
   vecteurGroup.length = 0;
 
   for each( currentString in tabContenu)
   {
        if (smileys[currentString] != null)
        {
         emoticone = creerImage(smileys[currentString]);
         var hauteur:Number = emoticone.height;
         var slargeur:Number = emoticone.width;
         element = new GraphicElement(emoticone, slargeur, hauteur, formatage);
        }
        else
        {
         element = new TextElement(currentString, formatage);
        }
 
        vecteurGroup.push(element);
   }
 
   groupeElement.setElements(vecteurGroup);
   texteBloc.content = groupeElement;
   creerLigne(texteBloc);
  }

  private function creerLigne(textBlock:TextBlock):void
  {
   var currentline:TextLine;
   var previousLine:TextLine;
   currentline = textBlock.createTextLine(null, largeur);
   previousLine = null;
   var yPos:int = 0;
 
   while (currentline!=null) {
 
        currentline.x = X_OFFSET;
        yPos += currentline.height + Y_OFFSET;
        currentline.y = yPos;
        previousLine = currentline;
        currentline = textBlock.createTextLine(previousLine, largeur);
   }
 
   supportTexte = new Sprite();
   this.addChild(supportTexte);
   currentline = textBlock.firstLine;
 
   while (currentline != null)
   {
        supportTexte.addChild(currentline);
        currentline = currentline.nextLine;
   }
  }

  public function creerImage(className:String):MovieClip
  {
   var chemin:String = "ui.smiley.";
   var myClass:Class = getDefinitionByName(chemin+className) as Class;
   var instance:MovieClip = new myClass();
   instance.scaleX = instance.scaleY = 1;
   return instance;
  }

  public function onResize(newWidth:Number):void
  {
   trace("lignes onResize appelé");
   rendu();
  }
}

}
 
Merci d'avance ;-)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP