声明不按预期工作

时间:2016-03-22 22:18:57

标签: javascript for-loop

这里没有经验丰富的程序员。

长话短说,我试图制作一个小太阳系类型的东西,当星的质量加上行星的质量大于或等于行星到星的中心的距离除以2,这颗行星应该落入恒星。

for(i = 0; i < planetamount; i++){
    if((starmass+planetmass[i]) >= (initialradius/2)){
        radius[i]--;
    }
}

在这种情况下,planetamount等于1,因为我只有一个行星。其中包含变量i的数组括号表示它正在采集哪个行星的数据(只有一个可用的行星0)。现在,奇怪的部分。

starmass = 100;
planetmass = [10];
radius = [150];
initialradius = radius[0];

那么,让我们检查一下;

starmass + planetmass = 100 + 10 = 110
initialradius/2 = 150/2 = 75

我们可以清楚地看到,110大于或等于75(在这种情况下大于),但是行星不会落入星星(是的,它是一个不断更新的画布动画,所以它是应该工作,由于某种原因它之前做过)。 radius [0]的值不会改变。 也许这个for循环在requestAnimationFrame()函数中的信息可能会有所帮助。

我真的希望这不会太混乱(可能是这样),但如果有人能给我一个简单的答案,那就太好了。

-JReesW

2 个答案:

答案 0 :(得分:0)

查看它在循环中迭代的次数。

我对你的目标可能是错的,但请试一试并告诉我你的想法:

for(var i = 0; i < planetamount; i++){
    if((starmass+planetmass[i]) >= (initialradius/2)){
        while(radius[i]>0) { radius[i]--; }
    }
}

答案 1 :(得分:0)

函数本身正常工作正常:在第一次(也是唯一的)迭代之后,它返回半径[0]值149(即150减1)。以下是测试片段:

<!DOCTYPE html>
<html>
<body>
<p id="radius0"></p>
<script>
        starmass = 100;
        planetmass = [10];
        radius = [150];
        initialradius = radius[0];
        planetamount=1;
        function test() {
            for (i = 0; i < planetamount; i++)
            {
                if ((starmass + planetmass[i]) >= (initialradius / 2))
                {
                    radius[i]--;
                }
            }
            return radius[0];
        }
        document.getElementById("radius0").innerHTML = test();
</script>
</body>
</html>

因此,问题在于代码中您未包含在帖子中的其他部分。

希望这可能会有所帮助。