ActionScript 3.0で壊れたのhtmlText - string.substringを使用して、増分ディスプレイからファンキー表示

StackOverflow https://stackoverflow.com/questions/2360864

質問

この、ActionScript 3.0でtextField.htmlTextの問題と私はそれのために作っているクラスです。

私のクラス全体を掲示しない試みで、私は愚かとほとんど不可能ツー克服の問題のように思えるものに問題煮詰めることができました。テキストフィールドには(具体的には、ActionScriptを使用して作成されたものは)

により作成されたタイプライティング効果でたまらなく苦労を持っているようです
myTextField.htmlText =  myString.substr(0, length);

の長さが増え続けるの増分です。のは、しかし、より具体的な例を取得してみましょう。開始するには、我々は我々の.flaファイルのフレーム1にいくつかのランダムな文字列を持っています:

var Text0:String = 'It wasn\'t like we didn\'t have love. John and I shared much of our love, but for some reason something went terribly wrong one day...\nWe talked less, we saw each other less, we hardly even got to know each other anymore. The love was dried up, and if I stayed I would have withered, and choked on words I could never share...';
私のクラスを使用すると、この文字列を取り、Xのキーワードそれらの単語を中心にY HTMLタグが適用されます:

var textBuildah = new textBuilder(); //Class name, for this example, is textBuilder
Text0 = textBuildah.htmlModify(Text0, ['love', 'red'], ['we', '~#FCFE12']);

これは(私たちはここで、フレーム1のアクションではまだだ)Text0を取り、それにこれを行います:

trace(Text0) // Outputs: It wasn't like <FONT COLOR="#FCFE12">we</FONT> didn't have <FONT COLOR="#FF0000">love</FONT>. John and I shared much of our <FONT COLOR="#FF0000">love</FONT>, but for some reason something <FONT COLOR="#FCFE12">we</FONT>nt terribly wrong one day... We talked less, <FONT COLOR="#FCFE12">we</FONT> saw each other less, <FONT COLOR="#FCFE12">we</FONT> hardly even got to know each other anymore. The <FONT COLOR="#FF0000">love</FONT> was dried up, and if I stayed I would have withered, and choked on words I could never share...

私はこれらすべてのHTMLタグが正しいと仮定しています。その後、我々は次の操作を行います。

textBox.htmlText = Text0 //textBox is a text field that was put on the stage and named "textBox" using the properties window

そして、私はそれ(この絵の右下)[i49.tinypic.com/2upts1v.jpg]たいと、それは正確に表示されます。 HTTPを追加します。//はそれを見るために、

はその後、私は上記のコードの行を消去し、これを試してみてください

var Length:Number = 0;
textBox.addEventListener(Event.ENTER_FRAME, writeText);

function writeText(e:Event):void {
    if (Length < Text0.length) {
        Length ++;
        e.currentTarget.htmlText = Text0.substring(0, Length);
        trace(e.currentTarget.htmlText+"\n"+e.currentTarget.name+"\n");
    } else {
        e.currentTarget.htmlText = Text0;
        e.currentTarget.removeEventListener(Event.ENTER_FRAME, writeText);
    }
}

そして、それだけでtextBox.htmlText = Text0をしているように動作します。

そこで、私たちは、何か新しいことを試してみてください。私たちは、ActionScriptを使用してTextFieldを作成し、それに同じイベントリスナーを適用します:

var LengthTwo:Number = 0;
var myTextField = new TextField();
myTextField.x = 100
myTextField.y = 100;
myTextField.width = 200;
myTextField.height = 150;
myTextField.wordWrap = true;

addChild(myTextField);

mytextField.addEventListener(Event.ENTER_FRAME, writeText);

function writeTextTwo(e:Event):void {
if (LengthTwo < Text0.length) {
    LengthTwo++;
    e.currentTarget.htmlText = Text0.substring(0, Length);
    trace(e.currentTarget.htmlText+"\n"+e.currentTarget.name+"\n");
} else {
    e.currentTarget.htmlText = Text0;
    e.currentTarget.removeEventListener(Event.ENTER_FRAME, writeText);
}
}
あなたはこの絵の中央に見られるような

これは何かを作り出します。 【i49.tinypic.com/2upts1v.jpg]。 HTTPを追加://はそれを見て。また、タイプながら、それは頻繁にとdisorientatingly色を変更します。私はいくつかの痕跡をした、と私はするmyTextFieldのは、htmlTextがそれの先頭に余分なタグを持っていることに気づきました。ここでは、トレースの1のスナップショットがいます:

<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#FF0000" LETTERSPACING="0" KERNING="0">It wasn&apos;t like <FONT COLOR="#FCFE12">we</FONT> didn&apos;t have love. John and I shared much of our love, but for some reason something <FONT COLOR="#FCFE12">we</FONT>nt terribly wrong one day...</FONT></P><P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#FF0000" LETTERSPACING="0" KERNING="0">We talked less, <FONT COLOR="#FCFE12">we</FONT> saw each other less, <FONT COLOR="#FCFE12">we</FONT> hardly even got to know each other anymore. The love was dried up, and if I stayed I would have withered, and choked on words I could never share..</FONT></P>
instance5

<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Calibri" SIZE="10" COLOR="#FFFFFF" LETTERSPACING="0" KERNING="0">It wasn&apos;t like <FONT COLOR="#FCFE12">we</FONT> didn&apos;t have <FONT COLOR="#FF0000">love</FONT>. John and I shared much of our <FONT COLOR="#FF0000">love</FONT>, but for some reason something <FONT COLOR="#FCFE12">we</FONT>nt terribly wrong one day...</FONT></P></TEXTFORMAT><TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Calibri" SIZE="10" COLOR="#FFFFFF" LETTERSPACING="0" KERNING="0">We talked less, <FONT COLOR="#FCFE12">we</FONT> saw each other less, <FONT COLOR="#FCFE12">we</FONT> hardly even got to know each other anymore. The <FONT COLOR="#FF0000">love</FONT> was dried up, and if I stayed I would have withered, and choked on words I could never share..</FONT></P></TEXTFORMAT>
textBox

私はこのプロセスを通じて、フィールドのHTMLタグをレンダリングするステージとセットに置くテキストが、それはタグ

を始めて続けることに気付きました
<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Calibri" SIZE="10" COLOR="#FFFFFF" LETTERSPACING="0" KERNING="0">

が存在し、単に内部の指定された部分に変更を加えます。 WRITETEXT機能がオンになり、SUBSTRINGがより多くのHTMLタグが含まれるように起動するようしかし、ボックスはVIAのActionScript 3.0を追加したテキストのために、それは、上記スタータのタグのいずれかを変更します。

んの誰もが、私が欠けているものを任意のアイデアがありますか?私はこの奇妙な効果を取り除くために定義する必要があるプロパティがありますか?

また、説明が長すぎた場合は、これがあります。私はを持ってきた正確に同じ問題を生じFLA。中央のテキストフィールドが問題です。右下隅にあるテキストフィールドは問題ではありません。

あなたはCS3 / 4のために作られていること.FLAを処理できない場合は、これを持ってます:

var Text0:String = 'It wasn\'t like <font color = "#FCFE12">we</font> didn\'t have <font color = "#FF0000">love</font>. John and I shared much of our <font color = "#FF0000">love</font>, but for some reason something <font color = "#FCFE12">we</font>nt terribly wrong one day...\nWe talked less, <font color = "#FCFE12">we</font> saw each other less, <font color = "#FCFE12">we</font> hardly even got to know each other anymore. The <font color = "#FF0000">love</font> was dried up, and if I stayed I would have withered, and choked on words I could never share...';
var myTextField:TextField = new TextField();
var Length:Number = 0;
var LengthTwo:Number = 0;
myTextField.x = 75;
myTextField.y = 100;
myTextField.width = 400;
myTextField.height = 150;
myTextField.wordWrap = true;
myTextField.textColor = 0xFFFFFF;
addChild(myTextField);

textBox.addEventListener(Event.ENTER_FRAME, writeText);
myTextField.addEventListener(Event.ENTER_FRAME, writeTextTwo);

function writeText(e:Event):void {
    if (Length < Text0.length) {
        Length ++;
        e.currentTarget.htmlText = Text0.substring(0, Length);
        trace(e.currentTarget.htmlText+"\n"+e.currentTarget.name+"\n");
    } else {
        e.currentTarget.htmlText = Text0;
        e.currentTarget.removeEventListener(Event.ENTER_FRAME, writeText);
    }
}

function writeTextTwo(e:Event):void {
if (LengthTwo < Text0.length) {
    LengthTwo++;
    e.currentTarget.htmlText = Text0.substring(0, Length);
    trace(e.currentTarget.htmlText+"\n"+e.currentTarget.name+"\n");
} else {
    e.currentTarget.htmlText = Text0;
    e.currentTarget.removeEventListener(Event.ENTER_FRAME, writeText);
}
}

これまでのところ、私は右下がmyTextFieldについては、TextFormatテキストフィールドの定義を設定しようとしています。それから私は、フィールドの特定ののTextFormat外を設定しようとしました。私はdefaultTextFormatに新しいフォーマットを作る試みた、私はWRITETEXT関数内のスタイルシートをリセットしようとしました...それは私のための物流悪夢の少しをされています。私は.FLA ...

での奇妙な色の変化を停止する方法が分かりません 問題はしかし、色では発生しません。あなたが関数に入れて、その時にタイプライティング効果を行うことなど、太字、イタリック体で発生します。しかし、あなただけ設定している場合は、htmlText = X、それは正常に見える。

任意のアイデア?

EDIT:下線、太字、斜体を使用して同じものを実装すると若干の問題があるようです、など誰もが上記のテキストでそれをするか、とのhtmlTextを使用して同様の効果を作成する方法上の任意のアイデアを持っている場合太字、斜体、等! - ここに答え

役に立ちましたか?

解決

あなたはのTextField あなたは存在しているデフォルトのTextFormat のを持っていることあなたは、フォント、色、サイズをリセットするテキストを変更するたびに、など。

はそうTextFieldのAS3ごダイナミックのためにあなたが維持し、その後にイベントリスナーはそれを足す前に、defaultTextFormatプロパティをリセットしたいすべてのフォーマットで新しいのTextFormatを作成します

var Text0:String = 'It wasn\'t like <font color = "#FCFE12">we</font> didn\'t have <font color = "#FF0000">love</font>. John and I shared much of our <font color = "#FF0000">love</font>, but for some reason something <font color = "#FCFE12">we</font>nt terribly wrong one day...\nWe talked less, <font color = "#FCFE12">we</font> saw each other less, <font color = "#FCFE12">we</font> hardly even got to know each other anymore. The <font color = "#FF0000">love</font> was dried up, and if I stayed I would have withered, and choked on words I could never share...';
var myTextField:TextField = new TextField();
var Length:Number = 0;
var LengthTwo:Number = 0;
myTextField.x = 75;
myTextField.y = 100;
myTextField.width = 400;
myTextField.height = 150;
myTextField.wordWrap = true;
addChild(myTextField);

// create a TextFormat
var tf:TextFormat = new TextFormat("Calibri", 10, 0xffffff);

myTextField.addEventListener(Event.ENTER_FRAME, writeTextTwo);

function writeTextTwo(e:Event):void {
  if (LengthTwo < Text0.length) {
    LengthTwo++;

    // reset the default TextFomat
    e.currentTarget.defaultTextFormat = tf;

    e.currentTarget.htmlText = Text0.substring(0, Length);
    trace(e.currentTarget.htmlText+"\n"+e.currentTarget.name+"\n");
  } else {
    e.currentTarget.htmlText = Text0;
    e.currentTarget.removeEventListener(Event.ENTER_FRAME, writeText);
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top