这里没有经验丰富的程序员。
长话短说,我试图制作一个小太阳系类型的东西,当星的质量加上行星的质量大于或等于行星到星的中心的距离除以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
答案 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>
因此,问题在于代码中您未包含在帖子中的其他部分。
希望这可能会有所帮助。