我有一个简单的计算器脚本,我必须用有效的东西替换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] = "/";
}
答案 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)
如果您检测到哪个按钮被推入侦听器功能可能会更好。