これは、actionScript3.0のtextField.htmlTextと私が作成しているクラスの問題です。
クラス全体を投稿しないように、私は問題を、ばかげてほとんど克服できない問題のように見えるものに要約することができました。TextFields(具体的には、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キーワードの場合、それらの単語の周りにYHTMLタグを適用します。
var textBuildah = new textBuilder(); //Class name, for this example, is textBuilder
Text0 = textBuildah.htmlModify(Text0, ['love', 'red'], ['we', '~#FCFE12']);
これはText0を取り(ここではまだフレーム1のアクションにあります)、これを行います。
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://を追加して表示します。また、タイプしている間、色が頻繁に変化し、方向感覚を失います。いくつかのトレースを行ったところ、myTextFieldのhtmlTextの先頭に余分なタグがあることに気付きました。トレースの1つのスナップショットを次に示します。
<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#FF0000" LETTERSPACING="0" KERNING="0">It wasn't like <FONT COLOR="#FCFE12">we</FONT> didn'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'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...</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">
そこで、内部の指定された部分に変更を加えるだけです。ただし、VIA Actionscript 3.0で追加されたテキストボックスの場合、writeText関数が実行され、subStringに含まれるHTMLタグが増えるにつれて、上記のスタータータグのいずれかが変更されます。
誰かが私が欠けているものを知っていますか?この奇妙な効果を取り除くために定義する必要のあるプロパティはありますか?
また、説明が長すぎる場合、これは私が抱えていたのとまったく同じ問題を引き起こす.flaです。真ん中のテキストフィールドが問題です。右下隅のtextFieldは問題ではありません。
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);
}
}
これまで、textField定義のすぐ下にあるmyTextFieldのTextFormatを設定してみました。次に、フィールドの外に特定のTextFormatを設定してみました。defaultTextFormatを新しい形式にしようとしましたが、writeText関数内でスタイルシートをリセットしようとしました...それは私にとって少しロジスティックな悪夢でした。.flaの奇妙な色の変化を止める方法がわかりません...
ただし、問題は色だけで発生するわけではありません。関数に入力し、そのタイプ書き込み効果を実行するのは、太字や斜体などで発生します。ただし、htmlText = xを設定しただけの場合は、問題なく表示されます。
何か案は?
編集:太字、斜体、下線などを使用して同じことを実装することにはわずかな問題があるようです。上記のテキストでそれを行う方法、または太字、斜体のhtmltextを使用して同様の効果を作成する方法について誰かが考えている場合、など-ここで答えてください!