Javascript 一个功能可以统治所有人
我正在编写一个应用程序,它显示符合某些物理定律的球。 我有一个球对象和一个路径原型。这个路径原型计算球在任何给定时刻的坐标并绘制它,有点像这样:Javascript 一个功能可以统治所有人,javascript,jquery,Javascript,Jquery,我正在编写一个应用程序,它显示符合某些物理定律的球。 我有一个球对象和一个路径原型。这个路径原型计算球在任何给定时刻的坐标并绘制它,有点像这样: Ball.prototype.path=函数(v){ 正在修改球坐标。。。 ctx.弧(..); (其他画布材料)} 如果要显示球的动画,请执行以下操作: ball.v = new V(...); var ball1=新球(…); var ball2。。。 函数循环(){ ctx.beginPath();//如果我在Path()中开始并关闭路
Ball.prototype.path=函数(v){
正在修改球坐标。。。
ctx.弧(..);
(其他画布材料)}
如果要显示球的动画,请执行以下操作:
ball.v = new V(...);
var ball1=新球(…);
var ball2。。。
函数循环(){
ctx.beginPath();//如果我在Path()中开始并关闭路径,球就不会出现,我不知道为什么。。。
ball1.path();
球2。。。
ctx.closePath();
};
设置间隔(循环,0.0015);
但是我想添加一个按钮来添加和显示球。所以我在寻找一个函数,它可以对任何添加的球执行这些命令
这有点棘手,因为它必须:
var BallArray=newarray();i=0;函数addBallock(){i++;BalleArray.push(i)};函数loop(){for(var i=0;i如注释中所述,答案是数组。您似乎不太了解它们,因此这里是一个快速概述。数组是一种对象列表。在您的情况下,您可能需要一个Ball
s的列表。您可以这样初始化它:
var balls = []; // [] is about the same as new Array(), but more concise
var ball = balls[i];
要向其添加新球,您可以使用推
,将球传给它:
balls.push(new Ball(/* ... */));
(当然,你也可以将一个已经存在的球传给它:)
您似乎知道如何循环数组,但不知道如何在循环数组时获取值。要循环数组,请使用for
循环:
for(var i = 0; i < balls.length; i++) {
// ...
}
现在ball
将球包含在balls
数组中的i
位置,您可以从那里对其执行任何操作。在您的情况下,您可能需要在其上调用path
:
// If you've stored it into a variable as above:
ball.path();
// Or more concisely without having to store it into a variable:
balls[i].path();
对于数组,不需要命名变量,例如,ball\u 1
,ball\u 2
,等等。相反,您只需要一个数组,balls
,并对其进行索引,例如,balls[0]
,balls[1]
,等等。你知道数组是什么吗?如果知道,那么使用数组并在其中循环。如果不知道,用谷歌搜索它并学习如何使用它们。还有很好的LOTR引用标题:)谢谢你的提示和对标题的赞美!我现在正在阅读更多关于数组的内容,但我不知道如何将数组名称应用于路径函数。对,我正在这样做:I=1;函数loop(){for(var I in Ball){ctx.beginPath();数组[I].path();ctx.closePath();I++;};}setInterval(loop,dt);
您可以直接使用数组,也可以定义一个BallArray
对象,就像Ball
一样,只是它将包含一些Ball
对象(数组!)第二种方法有助于控制不同的球组。@Frederik@doorknold我已经这样做了:var-BallArray=new-Array();I=0;function-AddBallonClick(){I++;BallArray.push(I)};function-loop(){for(var i=0;我在接近尾声时变懒了。可能会非常感谢你!你是对的,我以前没有很好地掌握数组的概念。至于代码,我有两个问题:每当我单击按钮时,都不会添加一个球,而是动画“回放”。另外,我想为每个新球设置一个初始速度,但当我将其添加到循环中时,它不起作用…:balles[I].v=new v(900,0);@user2352011不是球的属性吗?你应该选择类似于balls的东西。push(new ball(“ball_”+I,v))
而I
是你的球数,而v
是初始速度
for(var i = 0; i < balls.length; i++) {
// ...
}
var ball = balls[i];
// If you've stored it into a variable as above:
ball.path();
// Or more concisely without having to store it into a variable:
balls[i].path();