我正试图摆脱在主时间轴上使用代码,但我很难理解.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";
}
}
}
}
这可能是一个真正的noob问题,但任何帮助都表示赞赏。
答案 0 :(得分: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;
}
}
}
答案 1 :(得分:0)
简单类型的参数按值传递,因此为了返回更改的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;
}
}