AS2 计算中 eval() 的最佳替代品
Posted
技术标签:
【中文标题】AS2 计算中 eval() 的最佳替代品【英文标题】:best replacement for eval() in AS2 calculation 【发布时间】:2016-04-09 09:04:36 【问题描述】:我有一个简单的计算器脚本,我必须将 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] = "/";
【问题讨论】:
你为什么还在使用actionscript 2? actionscript 3 的表现要好得多 对不起朋友,我本来可以帮助你的,但是任何 adobe 产品都不再支持 Actionscript 2。如果你喜欢 actionscript 3,我可以给你替代脚本 因为我们学校只使用 Macromedia Flash 8 :/ 好吧,这就是遗产。无论如何,让我们看看我能做什么。但老实说,我只能给你未经测试的建议。我没有可以测试的 Macromedia Flash 8。 如果您能提出解决方案,欢迎您。我将在明天的课堂上对其进行测试,然后发布结果。 【参考方案1】: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()
替代方案。因此您应该将整个编码模式更改为类似的内容。
使用名为“label”的动态文本区域创建一个影片剪辑,并使用操作面板将上述代码粘贴到影片剪辑的第一帧。
现在您可以创建同一影片剪辑的多个实例并将它们命名为
“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下载。
【讨论】:
Picture-Link 这是我为您编辑的屏幕截图。你能发现一个错误。它在标签文本字段中输出一个“未定义”,我将所有 Buttons-Instanzes 命名为新的,到 btn_0...。它是德语程序布局,但应该类似于英语。 看起来你在上面的行中弄错了:创建一个带有名为“label”的动态文本区域的影片剪辑 创建一个movieclip并在其中放置一个名为“label”的动态文本区域 如何从给定的链接下载完成的 .fla 文件并检查你做错了什么。 你能不能重新更新你的 *.fla 文件,我最终在一个 404 站点【参考方案2】:如果您检测在侦听器函数中按下了哪个按钮会更好。
【讨论】:
例如如果每个单元格是按钮时是网格,您可以从鼠标指针坐标找到按钮。以上是关于AS2 计算中 eval() 的最佳替代品的主要内容,如果未能解决你的问题,请参考以下文章
CentOS 最佳替代品 - AlmaLinux Beta 已可供下载测试