带有数学方程式的Javascript问题



在开始之前,我为您在这篇文章中可能看到的大量代码道歉。这是我尝试过修复的最烦人的错误。我已经工作了好几个小时了,但还是什么也没找到。

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

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

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

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

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

下一行执行类似的操作,只是重新分配变量clicks,并减去cost(函数中的变量)的任何数字。

我认为,最后一个if语句是不言自明的。如果变量addfood大于零,它所做的就是运行函数addBPS。然后,仅当变量first不等于true时,它才为函数addBPS运行setInterval。(也可以看到变量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的值连续添加到clicks,而是将其添加,每次都将addfood的值平方。

示例:

默认值:

addfood=0
var点击=0;

addfood:添加一个

addfood=1
var点击(1秒后)=1;

addfood中添加两个:

addfood=2
var点击(1秒后)=4;

将三个添加到addfood:

addfood=3
var点击(1秒后)=9;

我的期望:

默认值:

addfood=0
var点击=0;

addfood:添加一个

addfood=1
var点击(1秒后)=1;

将两个添加到addfood:

addfood=2
var点击(1秒后)=2;

将三个添加到addfood:

addfood=3
var点击(1秒后)=3;

但是,正如我所说,如果addfood的初始值为1,那么代码工作正常。当它为零时,然后我使用按钮更改addfood的值,期望值即为平方。为什么会发生这种情况?

每次调用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;
}
}
}

最新更新