在AS3中为动态文本框组合appendText和htmlText

时间:2013-05-17 16:31:59

标签: actionscript-3 flash

您好我浏览了网页和此网页以获得答案,但似乎找不到解决我问题的方法。我创造了一个打字机效果。它通过动态文本框(tekst_txt)显示。我想要实现的是能够使用html标签将特定单词的字体改为粗体或斜体,只需包括ie< b>和< / b>但我似乎无法拉动这一点。我真的很感激一些建议。

这是在第一帧中显示的代码(该帧上不存在文本框):     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 = "";

}
}

这是下一帧的代码(文本框已存在于此框架中):

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();
}
}

1 个答案:

答案 0 :(得分:0)

您面临的问题是任何形式的HTML格式都需要超过1个字符来描述,因此当您尝试逐个字符进行此动画时,您实际上只是将原始html标记设置为文本。

这看起来有点乱,但是你可以尝试一下......

您将创建一个临时文本字段并首先将整个html标记文本设置为其htmlText值,然后您可以getTextFormat在您追加时复制每个字符的格式...这允许Flash为您处理html。

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();
    }
}