2016-01-05 44 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