Javascript问题与数学方程

时间:2014-02-17 20:11:00

标签: javascript jquery function math

在开始之前,我为您在本文中可能看到的丰富代码道歉。这是我曾试图解决的最烦人的错误。我已经工作了几个小时,但我还没有找到任何东西。

我有两个JavaScript变量,一个名为addfood,另一个名为clicks

下面的第一个函数(addBPS)获取变量addfoodclicks中的数字,并再次将该总和重新分配给变量clicks

该函数的下一个块只运行一个div中计数的动画。它读取div中的数字,并将其“动画”为变量clicks中的新数字。

当变量if大于零时,函数运行函数后的addfood语句。它还每秒运行函数addBPS。最后,if语句定义了一个名为first的变量,并将其设置为true。

下一个函数(在单击按钮时执行),重新分配变量addfood并添加add所具有的数字(函数中的变量)。

下一行做类似的事情,只需重新分配变量clicks并减去cost所有的数字(函数中的变量)。

我认为,最后一个if语句是非常自我解释的。它只是在变量addBPS大于零时运行函数addfood。只有当变量setInterval不等于true时,它才会为函数addBPS运行first。 (也可以看到变量first在第19行使用。)

var addfood = 5;
var clicks = 123;

function addBPS() {
    clicks = Number(clicks) + Number(addfood);

    // Countup animation
    $({countNum: $('#current').text()}).animate({countNum: Number(clicks)}, {
      duration: 1000,
      easing:'linear',
      step: function() {
        $('#current').text((Math.floor(this.countNum)));
      },
    });
}
if(Number(addfood) > 0) {
    addBPS();
    setInterval(addBPS, 1000);
    var first = true;
}

function upgradeGame(id, level, cost, add, user) {
    addfood = Number(addfood) + Number(add);
    clicks = Number(clicks) - cost;
    if(Number(addfood) > 0) {
        addBPS();
        if(first != true) {
            setInterval(addBPS, 1000);
        }
    }
}

所以现在这里出现了问题......

无论如何,函数addBPS每秒运行一次。它应该每秒不断地将addfood的值添加到clicks

如果addfood的值至少为1,则代码完美无缺。但是,当addfood的值为零时,如果我更改变量并使其成为一个(通过使用按钮),那么代替将addfood的值连续添加到{{1它添加了它,并且每次SQUARES都是clicks的值。

示例:

默认值:

addfood = 0;
var clicks = 0;

将一个添加到addfood

addfood = 1;
var clicks(1秒后)= 1;

将两个添加到addfood

addfood = 2;
var clicks(1秒后)= 4;

将三个添加到addfood

addfood = 3;
var clicks(1秒后)= 9;

我的期望:

默认值:

addfood = 0;
var clicks = 0;

将一个添加到addfood

addfood = 1;
var clicks(1秒后)= 1;

将两个添加到addfood

addfood = 2;
var clicks(1秒后)= 2;

将三个添加到addfood

addfood = 3;
var clicks(1秒后)= 3;

然而,就像我说的,如果addfood的初始值是1,那么代码工作正常。当它为零,然后我使用按钮更改addfood的值时,预期值为平方。为什么会这样?

1 个答案:

答案 0 :(得分:0)

每次调用upgradeGame()时,都会创建一个新的Interval。所以在第一次点击后,它只会被调用一次。在第二次点击后,它将被调用两次,等等。要解决此问题,您需要包括

first=true;

所以:

function upgradeGame(id, level, cost, add, user) {
addfood = Number(addfood) + Number(add);
clicks = Number(clicks) - cost;
if(Number(addfood) > 0) {
    addBPS();
    if(first != true) {
        setInterval(addBPS, 1000);
        first=true;
    }
}
}