在AS2计算中最好替换eval()

时间:2016-01-05 13:54:41

标签: flash actionscript eval actionscript-2

我有一个简单的计算器脚本,我必须用有效的东西替换var a = eval(tmp);。例如,var tmp可以填充4+5。在普通JS中,这应该工作并输出9,但在AS2中它不会。 trace(a)输出undefined。我应该改变什么才能让它发挥作用。 是否有类似的命令,比如JS?

这里是完整的ActionScript:

寻找BtnCalc.onPress = function(){}

var calcArr = new Array();

Btn0.onPress = function() {
    calcArr[calcArr.length] = 0;
}

Btn1.onPress = function() {
    calcArr[calcArr.length] = 1;
}

Btn2.onPress = function() {
    calcArr[calcArr.length] = 2;
}

Btn3.onPress = function() {
    calcArr[calcArr.length] = 3;
}

Btn4.onPress = function() {
    calcArr[calcArr.length] = 4;
}

Btn5.onPress = function() {
    calcArr[calcArr.length] = 5;
}

Btn6.onPress = function() {
    calcArr[calcArr.length] = 6;
}

Btn7.onPress = function() {
    calcArr[calcArr.length] = 7;
}

Btn8.onPress = function() {
    calcArr[calcArr.length] = 8;
}

Btn9.onPress = function() {
    calcArr[calcArr.length] = 9;
}

BtnCalc.onPress = function() {
    var tmp;
    for (var i = 0;i<calcArr.length;i++){
        if (i>=1){
            tmp = tmp+calcArr[i];
        }else{
            tmp = calcArr[i];
        }
        trace(tmp);
    }
    var a = eval(tmp);
    trace(a);
}

BtnAdd.onPress = function() {
    calcArr[calcArr.length] = "+";
}

BtnSubtract.onPress = function() {
    calcArr[calcArr.length] = "-";
}

BtnMult.onPress = function() {
    calcArr[calcArr.length] = "*";
}

BtnDivide.onPress = function() {
    calcArr[calcArr.length] = "/";
}

2 个答案:

答案 0 :(得分:0)

var p = "+", m = "*", s = "-", d = "/", D = ".", e = "=";
_global.lastOperator = "+";
label.text = this._name.split("_")[1];
if (eval(label.text) != undefined) {
    label.text = eval(label.text);
}
_global.a = 0;
_global.b = 0;
this.onPress = function() {
    switch (label.text) {
    case "C" :
        _global.a = 0;
        _global.b = 0;
        _global.lastOperator = "+";
        trace2(_global.b);
        break;
    case "=" :
        calc();
        _global.b = _global.a;
        _global.a=0;
        _global.lastOperator = "+";
        break;
    case "+" :
        calc();
        _global.lastOperator = "+";
        break;
    case "-" :
        calc();
        _global.lastOperator = "-";
        break;
    case "*" :
        calc();
        _global.lastOperator = "*";
        break;
    case "/" :
        calc();
        _global.lastOperator = "/";
        break;
    default :
        _global.b = _global.b+""+label.text;
        trace2(parseFloat(_global.b));
        break;
    }
};
function trace2(msg) {
    _root.op.text = msg;
}
function calc() {
    switch (_global.lastOperator) {
    case "+" :
        _global.a += parseFloat(_global.b);
        trace2(_global.a);
        break;
    case "-" :
        _global.a -= parseFloat(_global.b);
        trace2(_global.a);
        break;
    case "*" :
        _global.a *= parseFloat(_global.b);
        trace2(_global.a);
        break;
    case "/" :
        _global.a /= parseFloat(_global.b);
        trace2(_global.a);
        break;
    }
    _global.b=0;
}

不幸的是,在actionscript 2中没有eval()替代方案。所以你应该把整个编码模式改成这样的东西。

使用名为&#34; label&#34;的动态文本区域创建一个动画片段。并使用操作面板在动画片段的第一帧上粘贴上面的代码。

现在,您可以创建同一个动画片段的多个实例,并将它们命名为

&#34; btn_0&#34;,

&#34; btn_1&#34;,

&#34; btn_2&#34;,

...

&#34; btn_9&#34;,

&#34; btn_p&#34;,

&#34; btn_m&#34;,

&#34; btn_s&#34;,

&#34; btn_d&#34;,

&#34; btn_D&#34;,

&#34; btn_e&#34;

在按钮之后,创建一个名为&#34; op&#34;的动态文本区域。在舞台的根源。

多数民众赞成,你得到了你的计算器。

另外,请查看第4行以查看正确使用as2 eval()

我强烈建议不要使用动作2,因为它已经过时了。

完成的代码可以从我的google drive link下载。

答案 1 :(得分:0)

如果您检测到哪个按钮被推入侦听器功能可能会更好。