2016-01-05 43 views
0

我得到了一个简单的计算器脚本,我必须用有效的东西来代替var a = eval(tmp);。例如var tmp可以填写4+5。在普通的JS这应该工作并输出一个9,但在这里在AS2它不会。 trace(a)输出undefined。我应该改变什么,才能使其发挥作用。 有没有类似的命令,像在JS?AS2计算中eval()的最佳替代

这里完整的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] = "/"; 
} 
+0

你为什么还在使用actionscript 2? actionscript 3表现得更好 –

+0

对不起,我可以帮你的朋友,但任何adobe产品不再支持Actionscript 2。我可以给你另一种脚本,如果你喜欢动作3 –

+0

,因为我们只在我们学校使用Macromedia Flash 8:/ – Georodin

回答

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; 
} 

不幸的是,没有eval()替代在ActionScript 2,所以,你应该改变整个编码码型弄成这个样子。

用名为“label”的动态textarea创建一个movieclip,并使用操作面板将上面的代码粘贴到动画片段的第一帧。

现在你可以创建同一个影片剪辑的多个实例,并将其命名为

“btn_0”,

“btn_1”,

“btn_2”,

...,

“btn_9”,

“btn_p”,

“btn_m”,

“btn_s”,

“btn_d”,

“btn_D”,

“btn_e”

后的按钮,创建一个动态文本在舞台根部命名为“op”的区域。

就是这样,你有你的计算器。

此外,看看第4行看到正确使用as2 eval()

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

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

+0

[Picture-Link](https://picload.org/image/wdggwll/untitled.png)这是一个屏幕截图,我为你编辑。你能发现一个错误吗?它在标签文本字段中输出'undedefined' 我将所有Buttons-Instanzes命名为new,以btn_0 .... 这是德语程序布局,但它应该与英语相似。 – Georodin

+0

看起来你错了上面的线: 创建一个动态textarea名为“标签”的动画片段 –

+0

创建一个动画片段,并在里面放置一个名为“label”的动态textarea –

0

如果您检测到在侦听器功能中推入了哪个按钮,它可能会更好。

+0

例如,如果它是网格,当每个单元格都是按钮时,您可以从鼠标指针坐标中找到按钮。 – Aktash