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

简单类型的参数是按值传递的,所以为了返回一个 changed String,让你的公共函数返回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 回答