2013-05-17 5 views
0

Salut, je naviguerez sur le web et cette page web pour réponse, mais ne peut pas sembler trouver une solution pour mon problème. J'ai créé un effet de machine à écrire. Il est affiché dans une zone de texte dynamique (tekst_txt). Ce que je voudrais obtenir est d'être en mesure d'utiliser des balises HTML pour modifier la police de mot spécifique en gras ou en italique par tout, y compris à savoir < b> et </b> mais je ne peux pas sembler tirer ce de. J'apprécierais vraiment un conseil.appendText et htmlText zone de texte dynamique AS3

C'est le code qui apparaît dans la première image (la zone de texte n'existe pas sur cette image): import flash.events.MouseEvent;

stop(); 

var tekst:String = ""; 
var i:uint = 0; 

var licznik:Timer = new Timer(20); 

tekst_txt.htmlText = tekst_txt.text; 


stage.addEventListener(MouseEvent.CLICK, klikaj); 
function klikaj(event:MouseEvent):void 
{ 
if (licznik.running == true) 
{ 

    tekst_txt.htmlText = tekst; 
    licznik.stop(); 
} 
else if (licznik.running == false || licznik == null) 
{ 
    nextFrame(); 
    tekst_txt.text = ""; 

} 
} 

Et ce code est du cadre suivant (zone de texte existe déjà dans ce cadre):

import flash.events.MouseEvent; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 
stop(); 
tekst="Tekst1Tekst1<i>Tekst1</i>Tekst1Tekst1Tekst1Tekst1Tekst1Tekst1Tekst1"; 
licznik.start(); 
licznik.addEventListener(TimerEvent.TIMER, odpalaj); 
function odpalaj(e:TimerEvent):void 
{ 
//tekst_txt.htmlText = tekst_txt.text; 
tekst_txt.appendText(tekst.charAt(i)); 
//tekst_txt.htmlText=tekst_txt.text; 
i++; 
if (i >= tekst.length) 
{ 
    licznik.stop(); 
} 
} 

Répondre

0

Le problème que vous rencontrez est que toute forme de mise en forme HTML prendra plus de 1 caractère pour décrire , donc quand vous essayez de faire cette animation caractère par caractère, vous ne faites que définir le binaire html brut dans le texte.

Cela peut sembler un peu brouillon, mais voici quelque chose que vous pouvez essayer ...

Vous créer un champ de texte temporaire et définir l'ensemble du texte de balisage HTML dans sa valeur htmlText d'abord, vous pouvez getTextFormat copier le formatage pour chaque caractère que vous ajoutez ... cela permet à Flash de traiter le code HTML pour vous.

import flash.events.MouseEvent; 
import flash.utils.Timer; 
import flash.events.TimerEvent; 

stop(); 

tekst="Tekst1Tekst1<i>Tekst1</i>Tekst1Tekst1Tekst1Tekst1Tekst1Tekst1Tekst1"; 

// shove your html markup text into the htmlText of a textfield 
// this allows Flash to deal with parsing the html 
var myTextField:TextField = new TextField(); 
myTextField.htmlText = tekst; 

licznik.start(); 
licznik.addEventListener(TimerEvent.TIMER, odpalaj); 

function odpalaj(e:TimerEvent):void 
{ 
    // get the text directly from the temp textfield 
    // you want to do this because it will have already processed the html markup 
    // and will give you the correct indexes and length of your text 
    tekst_txt.appendText(myTextField.text.charAt(i)); 

    // copy the textformat 
    var format:TextFormat = myTextField.getTextFormat(i, i+1); 
    tekst_txt.setTextFormat(format, i, i+1); 

    i++; 
    if (i >= tekst.length) 
    { 
     licznik.stop(); 
    } 
} 
+0

qui sonne bien. Je vais essayer ça. Merci beaucoup pour vos conseils. – aya9

+0

Cela fonctionne. Un joli @Kaushal. Chose est sur l'image suivante où j'ai: 'code'import flash.events.MouseEvent; import flash.utils.Timer; import flash.events.TimerEvent; stop(); tekst = "tekst2 tekst2tekst2tekst2"; i = 0; licznik.start(); 'code' Il indique encore le texte de l'image précédente. – aya9

+0

quand vous dites la trame suivante, je suppose que nous parlons de l'image 3 ... pas en boucle à l'image 1? –

Questions connexes