Flash actionscript: moneycounter code not behaving correctly
我正在尝试以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个季度同样有效。无法找出问题所在。将不胜感激。
谢谢!
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | 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 2 | // Expect result to be 0.1 trace(0.3-0.2); |
0.09999999999999998
1 2 | // 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
您的
对于您的情况,请尝试将您的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) { ... } |