1

このコマンドは、Flash で選択されたテキスト フィールドを取得し、テキスト フィールド内の単語またはスペースに基づいて異なるグループに分割することになっています。コマンドが単語の順序を混同しています。(以下のコードでは、グループを異なるレイヤーに配布する部分を取り出しました。)

「コマンドのテスト」という単語を入力してコマンドを実行すると、文字数が逆になり、テキストフィールドが後ろから前に切り取られます。

たとえば、最初の単語「TEST」は 4 文字です。エラーは、単語「 command 」の末尾の「 d 」でテキストフィールドの末尾からカウントを開始することです。

その結果、"TEST" を切り詰める必要があるのに、 " mand " を切り詰めてしまいます。後ろから前に数えると、分割は正しい文字数に対応していることがわかりますが、逆になっています...

私の最初の本能は、配列の 1 つの順序を .reverse() で逆にしようとすることでした。しかし、うまくいきませんでした。

Flash CS 5.5、AS3 を使用しています。助けてください!

これが私が話していることの写真です...

ここに画像の説明を入力

var doc = fl.getDocumentDOM();

var mystring = doc.getTextString();


var numberOfWords = mystring.split(" ").length;
var wordArray = new Array();
for (var k = 0; k < numberOfWords; k++){
    wordArray[k] = new Array();
}

cntrNew = i = j = 0;
for (var ctr = 0; ctr < mystring.length; ctr++){
    if (mystring.charAt(ctr) == " "){
        i++;
    }
    else{
        wordArray[i].push(cntrNew);
        cntrNew++;
    }
}

doc.breakApart();
var selectionArray = new Array();
var tempArray = new Array();
var finalArray = new Array();

selectionArray = doc.selection;
doc.selectNone();

for (var i in wordArray){
    for (var k = 0; k < wordArray[i].length; k++){
        fl.trace(wordArray[i][k]);
        //wordArray.reverse();
        tempArray[k] = selectionArray[wordArray[i][k]];
     }
    fl.trace("break");

    doc.selection = tempArray;
    doc.group();
    finalArray[i] = doc.selection;
    doc.selectNone();
 }
4

1 に答える 1

2

たぶんこれが役立つでしょう。プロセスを少し簡略化しました。「txt」と呼ばれるステージ上のテキスト フィールドを使用して、AS3 プロジェクトでテストしました。

var mystring:String = txt.text;
var words:Array     = mystring.split(" ");

for (var i = 0; i < words.length; i++)
{
    for (var k = 0; k < words[i].length; k++)
    {
        trace("letter:",words[i].charAt(k));
    }
    trace("-");
}

以下を出力します。

letter: t
letter: e
letter: s
letter: t
-
letter: o
letter: f
-
letter: t
letter: h
letter: e
-
letter: c
letter: o
letter: m
letter: m
letter: a
letter: n
letter: d
letter: s
-
于 2012-10-19T00:20:07.950 に答える