0

メイン タイムラインでコードを使用することから離れようとしていますが、.as ファイルと .fla ファイルがどのように相互作用するかを理解するのに苦労しています。たとえば、変数をメイン タイムラインからパブリック関数に渡し、その変数に何らかの処理を加えてメイン タイムラインに戻す方法を見つけようとしています。フレームに入力テキスト ボックスとリスナー付きのシンプルなボタンがあります。テキストボックスに 00000 00 を入力して 0.00 を返してもらいたいです。以下は私のコードです:

import flash.events.MouseEvent;
import convertToDecimal;
var inputText:String;
var outputText:String;

submit_btn.addEventListener(MouseEvent.CLICK, submit);

function submit(e:MouseEvent):void
{
    inputText = input_txt.text;
    new convertToDecimal(inputText);
    trace();
}

そして、ここにパブリック関数があります:

package
{
    import flash.sampler.StackFrame;
    import flash.events.MouseEvent;
    import fl.controls.Button;
    public class convertToDecimal
    {
        public function convertToDecimal(stringParmter:String)
        {
            var rex:RegExp = /[\s\r\n]+/gim;
            stringParmter = stringParmter.replace(/^\s+|\s+$/g, '');
            stringParmter = stringParmter.replace(rex,'.');
            stringParmter = stringParmter.replace(/^0+(?!\.|$)/, '');
            if ((stringParmter == "-----.--") || (stringParmter == "0"))
            {
                stringParmter = "      00";
            }
        }
    }
}

これはおそらく本当に初歩的な質問ですが、どんな助けでも大歓迎です。

4

2 に答える 2

2

クラスがある場合、それを使用するには、その「コピー」を作成して変数に割り当てる必要があります。クラスの構築は非常に簡単です。

new convertToDecimal(inputText); // does the constructing job

しかし、次に何が起こるでしょうか?プログラムが次の行に進むと、構築したクラスが解放されます! メモリに保持するには、変数に割り当てる必要があります。

var yourVariableName:convertToDecimal = new convertToDecimal(inputText);

これで、クラスの「コピー」ができました。OOP パラダイムは、大量の「コピー」を非常に簡単に作成でき、各「コピー」が独自のライブで存続するため、優れています。


あなたの質問に戻りましょう。コードをタイムラインに追加することが悪いことであることは周知の事実です。代わりに、クラスをプロジェクトにアタッチし、次のように変更します。

    package
{
    import flash.sampler.StackFrame;
    import flash.events.MouseEvent;
    import fl.controls.Button;

    public class Main
    {
        public function Main()
        {
            submit_btn.addEventListener(MouseEvent.CLICK, submit);

        }

        private function submit(e:MouseEvent):void
        {
            var inputText:String = input_txt.text;
            inputText = convertToDecimal(inputText);
            trace(inputText);
        }

        private function convertToDecimal(stringParmter:String):String
        {
            var rex:RegExp = /[\s\r\n]+/gim;
            stringParmter = stringParmter.replace(/^\s+|\s+$/g, '');
            stringParmter = stringParmter.replace(rex, '.');
            stringParmter = stringParmter.replace(/^0+(?!\.|$)/, '');
            if ((stringParmter == "-----.--") || (stringParmter == "0"))
            {
                stringParmter = "      00";
            }
            return stringParmter;
        }
    }
}
于 2013-07-08T14:30:21.743 に答える
0

単純型のパラメーターは値渡しされるため、変更済みを返すにはString、パブリック関数を return にしますString

public function convertToDecimal(stringParmter:String):String {...}

次に、外部で使用できるようにしたい値を思いついたらreturn <the value>;、関数にステートメントを入れます。関数から返された値を取得するには、それを変数に割り当てます。渡されたものと同じものを使用できます。

stringParameter=convertToDecimal(stringParmter);

また、AS3 ファイルに関数のみが含まれている場合は、それをクラスにラップすることを避けて、「パブリック関数...」を直接宣言できます。

package
{
    public function convertToDecimal(stringParmter:String):String
    {
            var rex:RegExp = /[\s\r\n]+/gim;
            var s:String;
            s = stringParmter.replace(/^\s+|\s+$/g, '');
            s = s.replace(rex,'.');
            s = s.replace(/^0+(?!\.|$)/, '');
            if ((s == "-----.--") || (s == "0"))
            {
                s = "      00";
            }
            return s;
    }
}
于 2013-07-08T14:34:39.323 に答える