我正在编写一个应用程序,它显示符合某些物理定律的球。所以我有一个球对象和一个路径原型。这个路径原型在任何给定时刻计算球的坐标并绘制它,有点像这样:
Ball.prototype.path = function(v) {
modifying the ball coordinates...
ctx.arc(....);
(other canvas stuff)}
如果我想显示球的动画,我这样做:
var ball1 = new Ball(...);
var ball2...
function loop () {
ctx.beginPath(); // The balls won't show up if I begin and close the Path in path(), I don't know why...
ball1.path();
ball2...
ctx.closePath();
};
setInterval(loop, 0.0015);
但我想添加一个按钮来添加和显示球。所以我正在寻找一个对添加的任何球执行这些命令的函数。
这有点棘手,因为它必须:
- 创建并命名一个新变量。
- 根据该名称执行 path() 。
- 所有这些,都在同一个循环函数中,所以我可以稍后创建一个 setInterval。
编辑:已修复 @Frederik @Doorknob 我使用了 BallArray:
var BallArray = new Array(); i=0; function AddBallonClick() { i++; BalleArray.push(i) }; function loop() { for (var i=0;i<BalleArray.length;i++) { ctx.beginPath(); var ball = new Ball(0, 0, 40); ball.path(); ctx.closePath(); }; }; setInterval(loop, dt);
但我想命名新变量ball_i,即:ball_1,ball_2...,我不知道如何命名。即使我只添加一次球,脚本似乎也不起作用,所以这也是一个问题......
编辑 2:已修复
另外,我想为每个新球设置一个初始速度,通常我这样做:
ball.v = new V(...);
但是现在我有一个数组,我将它添加到循环中,但它不起作用......:
balles[i].v = new V(...)
编辑 3:
我还有另一个问题,每当我单击按钮时,都不会添加和绘制球,而是动画“重播”。似乎javascript不能用我的代码同时画球:
function loop()
{
for(var i = 0; i < balls.length; i++) {
ctx.beginPath();
balls[i].path();
ctx.closePath();
}
};
setInterval(loop, dt);
编辑:全部修复我已经解决了最后一个问题,你只需ctx.clearRect(0, 0, width, height)
要将for(var i=0...)
.
感谢大家 :) !