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);
但是我想添加一个按钮来添加和显示球。所以我在寻找一个函数,它可以对任何添加的球执行这些命令

这有点棘手,因为它必须:

  • 创建并命名一个新变量
  • 根据该名称执行path()
  • 所有这些都在同一个循环函数中,因此我可以在以后生成setInterval
  • 编辑:已修复 @Frederik@门把手我用了一个巴拉雷:


    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();