Кассовая игра - сопоставление обновленной переменной со статическими переменными в AS3 - PullRequest
1 голос
/ 28 октября 2011

Я пытаюсь создать игру-симулятор кассового аппарата и столкнулся с проблемой с условным оператором, который я использую, чтобы проверить, предоставляется ли клиенту правильное изменение и нажимается ли кнопка или нет.В этой игре пользователь может видеть сумму продажи, а также сумму, которую платит клиент.Имея эту информацию, они должны щелкнуть по ячейкам кассового ящика, что увеличит переменную с именем changeCount на значение выбранной ими денежной единицы.

Я использую оператор if, чтобы перенести их в следующий кадр ifchangeCount = payment-sale и кнопка подтверждения была нажата.Чтобы проверить кнопку, я использую логическое значение, чтобы увидеть, нажата она или нет.По какой-то причине он не регистрирует обновленное значение changeCount, чтобы оператор if работал.Кто-нибудь знает, почему это будет?Если я отслеживаю значение с помощью trace (changeCount);он вернет значение, которое я хочу.Исходный код вставлен ниже:

package 
   {


public class CashierMain extends MovieClip
{
    private var confirmBtn:ConfirmButton;
    private var pennyBtn:PennyButton;
    private var dimeBtn:DimeButton;
    private var nickelBtn:NickelButton;
    private var quarterBtn:QuarterButton;
    private var oneBtn:OneButton;
    private var fiveBtn:FiveButton;
    private var tenBtn:TenButton;
    private var twentyBtn:TwentyButton;
    private var changeCount:Number;
    private var payment:int;
    private var sale:Number;
    private var clicked:Boolean;
    private var total:Number;

    public function startCashierMain()
    {
        //instantiating change count
        changeCount = 0;
        clicked = false;
        sale = Math.random() * 50;
        payment = Math.random() * 20 + sale;
        total = payment - sale;
        showPayment();
        showChangeCount();
        showSale();
        showTotal();
        //creating visuals
        confirmBtn = new ConfirmButton();
        confirmBtn.x = 450;
        confirmBtn.y = 85;
        addChild(confirmBtn);
        pennyBtn = new PennyButton();
        pennyBtn.x = 100;
        pennyBtn.y = 50;
        addChild(pennyBtn);
        nickelBtn = new NickelButton();
        nickelBtn.x = 175;
        nickelBtn.y = 50;
        addChild(nickelBtn);
        dimeBtn = new DimeButton();
        dimeBtn.x = 250;
        dimeBtn.y = 50;
        addChild(dimeBtn);
        quarterBtn = new QuarterButton();
        quarterBtn.x = 315;
        quarterBtn.y = 50;
        addChild(quarterBtn);
        oneBtn = new OneButton();
        oneBtn.x = 75;
        oneBtn.y = 200;
        addChild(oneBtn);
        fiveBtn = new FiveButton();
        fiveBtn.x = 200;
        fiveBtn.y = 200;
        addChild(fiveBtn);
        tenBtn = new TenButton();
        tenBtn.x = 325;
        tenBtn.y = 200;
        addChild(tenBtn);
        twentyBtn = new TwentyButton();
        twentyBtn.x = 450;
        twentyBtn.y = 200;
        addChild(twentyBtn);

        //Listeners
        pennyBtn.addEventListener(MouseEvent.CLICK,clickPenny);
        nickelBtn.addEventListener(MouseEvent.CLICK,clickNickel);
        dimeBtn.addEventListener(MouseEvent.CLICK,clickDime);
        quarterBtn.addEventListener(MouseEvent.CLICK,clickQuarter);
        oneBtn.addEventListener(MouseEvent.CLICK,clickOne);
        fiveBtn.addEventListener(MouseEvent.CLICK,clickFive);
        tenBtn.addEventListener(MouseEvent.CLICK,clickTen);
        twentyBtn.addEventListener(MouseEvent.CLICK,clickTwenty);
        confirmBtn.addEventListener(MouseEvent.CLICK, clickConfirm);





    }


    public function clickPenny(event:MouseEvent)
    {
        changeCount +=  .01;
        showChangeCount();
    }
    public function clickNickel(event:MouseEvent)
    {
        changeCount +=  .05;
        showChangeCount();
    }
    public function clickDime(event:MouseEvent)
    {
        changeCount +=  .10;
        showChangeCount();
    }
    public function clickQuarter(event:MouseEvent)
    {
        changeCount +=  .25;
        showChangeCount();
    }
    public function clickOne(event:MouseEvent)
    {
        changeCount +=  1;
        showChangeCount();

    }
    public function clickFive(event:MouseEvent)
    {
        changeCount +=  5;
        showChangeCount();
    }
    public function clickTen(event:MouseEvent)
    {
        changeCount +=  10;
        showChangeCount();
    }
    public function clickTwenty(event:MouseEvent)
    {
        changeCount +=  20;
        showChangeCount();
    }

    public function showChangeCount()
    {
        showChange.text = String("Change Tendered $ " + changeCount.toFixed(2));


    }
    public function showPayment()
    {
        paid.text = String("Amount Paid $ " + payment);

    }
    public function showSale()
    {
        totalSale.text = String("Cost of Sale " + sale.toFixed(2));

    }
    public function showTotal()
    {
        totaled.text = String("total $ " + total.toFixed(2));

    }
    public function clickConfirm(event:MouseEvent)
    {
        if (total == changeCount && clicked == false)
        {
            gotoAndPlay("next");
        }
    }






}

}

Я довольно новичок на этом сайте, поэтому, если мой вопрос кажется расплывчатым или вы не понимаете, о чем я спрашиваю, почувствуйтесвободно, чтобы я прояснил что-нибудь.Спасибо всем за помощь.

1 Ответ

0 голосов
/ 28 октября 2011

Прежде всего, я не уверен, зачем вам нужна переменная clicked. У вас есть прослушиватель событий, чтобы увидеть, была ли нажата кнопка или нет.

Вы получаете несоответствие, потому что total и changeCount на самом деле разные. Поскольку Math.random() генерирует значения от 0 до 1. Вы получаете переменные для переменных sale и payment, которые имеют много чисел после числа дроби (например, 20.23515542354624 и т. Д.). Поскольку вы не округляете числа, в GUI показывайте их только как округленные (toFraction(2) не округляет числа, а просто возвращает строку округленного представления), в итоге вы сравниваете что-то вроде 20.23515542354624 с 20.23, что, очевидно не равен.

Проследите все ваши числовые переменные, вы поймете, что я имею в виду, если не получите сейчас.

Решение заключается в округлении переменной total до формата .xx, например:

total = Math.round((payment - sale) * 100) / 100;

Извините, мой технический английский для знания математики плохой, я использую много выдуманных терминов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...