Flash操作脚本:moneycounter代码无法正常运行

时间:2019-07-01 22:48:44

标签: actionscript-3 flash actionscript actionscript-2

我正在尝试以Adobe Flash(动画)动画设置虚拟巴士售票机。

前提是您必须输入准确的票价,因为驾驶员不会携带零钱。确切的票价是2美元。本机接受5美分,10美分,25美分,1美元,5美元,10美元和20美元的面额。如果输入的任何金额超过$ 2,则会弹出一条消息,提示“仅请提供准确的票价。驾驶员无法提供零钱。”因此,在这种情况下,只有5美分,10美分,25美分和1美元面额可用,但是必须输入它们才能使2美元相加。

以下代码单独和组合使用时对于25美分和1美元面额正确工作,但是当单独使用5美分和10美分或与25美分和1美元组合使用时,则错误地起作用。例如,如果您尝试仅使用角钱达到$ 2,则总计将达到$ 1.90,但是当您输入最后的10美分时不会支付费用。而是会弹出“请仅提供准确票价”消息。如果再添加一个镍,总金额将达到$ 1.95,但再次输入最终镍将不会支付车费。而是弹出“请只提供准确票价”。消息再次被触发。

输入$ 1,然后再输入$ 1,效果很好。输入8个季度以及输入$ 1和4个季度同样有效。无法找出问题所在。将不胜感激。 谢谢!

代码如下:

var Cash = 00.00
var payola = Money.text = "02.00";
Money.text = "$" + Cash.toFixed(2);
popup.visible = false;


nickel_btn.addEventListener(MouseEvent.CLICK, add5cents);

function add5cents(event:MouseEvent):void
{
    nickelcoin_mc.gotoAndPlay ("nickel_pay"); 
    Cash+=00.05;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        nickelcoin_mc.gotoAndPlay ("nickel_nopay");
        Cash-=00.05;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}

dime_btn.addEventListener(MouseEvent.CLICK, add10cents);

function add10cents(event:MouseEvent):void
{
    dimecoin_mc.gotoAndPlay ("dime_pay"); 
    Cash+=00.10;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        dimecoin_mc.gotoAndPlay ("dime_nopay");
        Cash-=00.10;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}

quarter_btn.addEventListener(MouseEvent.CLICK, add25cents);

function add25cents(event:MouseEvent):void
{
    quartercoin_mc.gotoAndPlay ("quarter_pay"); 
    Cash+=00.25;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        quartercoin_mc.gotoAndPlay ("quarter_nopay");
        Cash-=00.25;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}

one_btn.addEventListener(MouseEvent.CLICK, add$1);

function add$1(event:MouseEvent):void
{
    onebill_mc.gotoAndPlay ("one_pay"); 
    Cash+=01.00;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        onebill_mc.gotoAndPlay ("one_nopay");
        Cash-=01.00;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}

five_btn.addEventListener(MouseEvent.CLICK, add$5);

function add$5(event:MouseEvent):void
{
    fivebill_mc.gotoAndPlay ("five_pay"); 
    Cash+=05.00;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        fivebill_mc.gotoAndPlay ("five_nopay");
        Cash-=05.00;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}

ten_btn.addEventListener(MouseEvent.CLICK, add$10);

function add$10(event:MouseEvent):void
{
    tenbill_mc.gotoAndPlay ("ten_pay"); 
    Cash+=10.00;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        tenbill_mc.gotoAndPlay ("ten_nopay"); 
        Cash-=10.00;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}

twenty_btn.addEventListener(MouseEvent.CLICK, add$20);

function add$20(event:MouseEvent):void
{
    twentybill_mc.gotoAndPlay ("twenty_pay"); 
    Cash+=20.00;
    Money.text = "$" + Cash.toFixed(2);
    if(Cash == payola){
      setTimeout(delay, 500);
      function delay(){
        gotoAndStop(46);
        }
    }
    if(Cash > payola){
        twentybill_mc.gotoAndPlay ("twenty_nopay");
        Cash-=20.00;
        Money.text = "$" + Cash.toFixed(2);
        popup.visible = true;
    }
    else {
        popup.visible = false;
    }
}


stop();

1 个答案:

答案 0 :(得分:3)

这可能是由浮点数引起的问题。尝试将其放入代码中并检查控制台输出:

// Expect result to be 0.1
trace(0.3-0.2);
  

0.09999999999999998

// Adding lots of 5 cent coins. Expect result to be 0.5
trace(0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05 + 0.05);
  

0.49999999999999994

您的==比较有时会失败,因为将浮点数加在一起可能会导致意外的值。这个答案很好地说明了问题:https://stackoverflow.com/a/3730040/11678918

对于您的情况,请尝试将Cash变量更改为int,然后存储美分而不是美元:

var Cash:int = 0;
var payola:int = 200; // 2 dollars

// Add 5 cents
Cash += 5;

// Adding 1 dollar
Cash += 100;

// Printing out the amount in dollars and cents
Money.text = "$" + (Cash / 100).toFixed(2);

// Our exact check is safe now that we avoid floats.
if(Cash == payola) { ... }