我正在编写一个脚本来绘制太阳的图像,并有一个围绕它的地球轨道的图像。
我已经这样定义了一个行星类:
function planet(name, size, rotateRate, startx, starty, colour, scale, oRad, oAng, oSpd){//container class for planets
this.name = name;
this.rotateRate = rotateRate;
this.x = startx;
this.y = starty;
this.colour = colour;
this.scale = scale;
this.size = size;
this.orbitRadius= oRad;
this.orbitAngle = oAng;
this.orbitSpeed = oSpd;
this.drawByArc =
function drawArcCircle(){//draws circles using the arc method
context.save();
context.strokeStyle = '#000000';
context.fillStyle = this.colour;
context.lineWidth=3;
context.beginPath();
context.arc(this.x,this.y,this.size*this.scale,0,Math.PI * 2,false)
context.stroke();
context.fill();
context.closePath();
context.restore();
}
}
现在我在程序中创建了该类的两个实例,并使用以下函数很好地绘制了它们:
function gameLoop(){//The Game Loop
var thisTime = Date.now();//current time
var deltaTime = thisTime - lastTime;//find difference, not yet used
update();
draw();
lastTime = thisTime;
setTimeout(gameLoop, 1000/60);
}
function draw(){// Draws all the objects
drawBackground();
Sun.drawByArc();
Earth.drawByArc();
}
function update(){// Updates for animation
//var newRotation = this.getCurrantRotation() + (this.getRotationRate()*deltaTime);
var gSegments;
gScale = 4;
simSpeed = 10;
Sun.scale = gScale;
Earth.scale = gScale;
Earth.orbitSpeed = 360/simSpeed;
//Earth.x = Sun.x + Earth.orbitRadius * Math.cos(Earth.orbitAngle * Math.pi / 180);
//Earth.y = Sun.y - Earth.orbitRadius * Math.sin(Earth.orbitAngle * Math.pi / 180);
}
当我注释掉更新方法的最后两行时,两个圆圈都画得很好,但是当我添加最后两行以尝试更新地球在轨道上的位置时,当我尝试在 chrome 中运行代码时地球球消失!
Chrome 调试器没有显示任何错误,所以我不知道它为什么会发生。
编辑::
好吧,我发现由于一个小的输入错误(math.pi 而不是 Math.PI),我的行星 x 和 y 值变成了 NaN。
但是现在我的地球被困在其轨道上的 90 度角,根本不动,至少它在画,有什么想法吗?