Frage

Dies ist ein Problem mit textField.htmlText in Actionscript 3.0 und die Klasse Ich mache es.

In einem Versuch, nicht meine ganze Klasse zu schreiben, hat mich unten das Problem zu kochen geschaffen, was scheint wie ein dummes und fast unmöglich zu überwinden Problem. Es scheint, dass Textfelder (genauer gesagt, mit Actionscript erstellt ist) mit einem Typ-Schreiben eine unerträglich harten Zeit-Effekt erstellt von

myTextField.htmlText =  myString.substr(0, length);

Dabei Länge ist ein ständig wachsender Zuwachs. Lassen Sie uns ein konkretes Beispiel bekommen, aber. Um zu beginnen, haben wir einige zufällige Zeichenfolge auf dem Rahmen 1 unserer Fla-Datei:

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...';

meine Klasse verwenden, dauert es diese Zeichenfolge und für X Keywords Y HTML-Tags um diese Worte:

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

Dies geschieht Text0 (wir sind immer noch in den Aktionen von Frame 1 hier) und tut dies, um es:

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...

Ich gehe davon aus all diesen HTML-Tags korrekt sind. Dann können wir dies tun:

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

Und es zeigt genau so, wie ich es will (unten rechts auf dieser Abbildung) [i49.tinypic.com/2upts1v.jpg]. In http:. // es sehen

Dann löschte ich die Codezeile oben und versuche, diese:

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

Und, funktioniert es wie nur tun textBox.htmlText = Text0;

Dann versuchen wir etwas Neues. Wir erstellen ein Textfeld mit Actionscript, und wenden Sie den gleichen Ereignis-Listener hinzu:

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

Es erzeugt so etwas wie Sie in der Mitte des Bildes zu sehen. [I49.tinypic.com/2upts1v.jpg]. Fügen Sie http: // es zu sehen. Auch wenn es Arten, es ändert Farben häufig und disorientatingly. Ich habe ein paar Spuren, und ich erkennen, dass der html der myTextField Extra-Tags am Anfang hat. Hier ist eine Momentaufnahme von einem der Spuren:

<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

Ich habe erkannt, dass Feld während dieses Prozesses, ein Text auf der Bühne und Set setzte HTML-Tags Render halten es fängt Tags

<TEXTFORMAT LEADING="2"><P ALIGN="LEFT"><FONT FACE="Calibri" SIZE="10" COLOR="#FFFFFF" LETTERSPACING="0" KERNING="0">

Es und einfach Änderungen an den angegebenen Stücke im Inneren. Doch für eine Textbox hinzugefügt VIA Actionscript 3.0, ist es eine der oben genannten Starter-Tags ändert sich die Funktion writetext auf geht und die Teilkette beginnt zu zählen immer mehr HTML-Tags.

hat jemand eine Idee, was ich vermisst habe? Gibt es eine Eigenschaft muss ich definieren dieses seltsamen Effekt loswerden?

Auch wenn die Erklärung ist zu lang, ist dies ein. fla, die genau das gleiche Problem erzeugt ich habe mit. Das mittlere Textfeld ist das Problem. Das Textfeld in der rechten unteren Ecke ist kein Problem.

Wenn Sie fla nicht umgehen kann, die dies für CS3 / 4, haben gemacht hat:

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

Bisher habe ich versucht, direkt unter der TextField- Definition der Textformat für myTextField Einstellung. Dann habe ich versucht, ein bestimmtes Textformat außerhalb des Feldes zu setzen. Ich habe versucht, die default ein neues Format zu machen, ich habe versucht, das Stylesheet innerhalb des writetext Funktion Zurücksetzen ... Es war ein bisschen ein logistischer Alptraum für mich. Ich habe keine Ahnung, wie die seltsamen Farbänderungen zu stoppen in dem Fla ...

Das Problem nicht nur mit Farbe passieren, aber. Es geschieht mit fett, kursiv, usw., dass Sie in die Funktion setzen und tun, dass Typ-Schreiben Wirkung auf. Wenn Sie jedoch nur html gesetzt = x, dann ist es sieht gut aus.

Irgendwelche Ideen?

EDIT: Es scheint bei der Umsetzung die gleichen Dinge mit Fett, Kursiv, Unterstrichen usw. ein kleines Problem zu sein, wenn jemand eine Idee hat, wie Sie das mit dem obigen Text oder einen ähnlichen Effekt erzeugen mit html mit fett, kursiv, etc - Antwort hier

War es hilfreich?

Lösung

Sie können in Ihrem IDE sehen erstellt TextField- , dass Sie eine Standard Textformat , die vorhanden ist wenn Sie den Text ändern, dass die Schrift zurücksetzen, Farbe, Größe, etc ..

Also für Ihre dynamischen AS3 TextField- schafft ein neues Textformat mit all Format mögen Sie halten und dann in Ihnen Event-Listener nur die Eigenschaft default zurücksetzen, bevor es writting:

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);
  }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top