弹跳球(课堂上)-需要帮助编码数组

时间:2018-11-18 13:29:25

标签: java arrays processing

我是新手,正在做有关Java(带有Processing)的初学者讲座。这次我们的任务是弹跳球。我已经(成功地)成功地将其移动到了预期的状态,并将其放入类中,但是我无法正确处理数组。

以下是使用该类的版本:

class Ball {
float x;
  float y;
  float ySpeed;
  float gravity;

int counter = 0;

Ball()
{ 
x = 300;
y = 300;

ySpeed = 2.5;
gravity = 0.2;

}

void move()
{
  y = y + ySpeed;
   ySpeed = ySpeed + gravity;

  if (y > height-25 )

  {ySpeed = ySpeed * -0.85;
 y = height-25;

 counter++;
  }
  println(counter);

 if(counter >= 17)
 {ySpeed=0;
 y=height-25;}
}


void display()
{
  ellipse(x,y,50,50);
}
}

//using the class:
Ball b1;

void settings()
{
  size(800,600);
}

void setup()
{
  b1 = new Ball();
}

void draw()
{
  background(0);
  b1.move();
  b1.display();
  }

这是我彻底弄乱之后的结果。

    //class Ball 
class Ball {
float[] x;
  float[] y;
  float[] ySpeed;
  float[] gravity;
  int i;

int counter = 0;

//constructor
Ball()
{ 
x[i] = 300;
y[i] = 300;

ySpeed[i] = 2.5;
gravity[i] = 0.2;


}

void move()
{
  y[i] = y[i] + ySpeed[i];
   ySpeed[i] = ySpeed[i] + gravity[i];

  //changes direction; (-25) to avoid movement beyong boundary

  if (y[i] > height-25 )

  {ySpeed[i] = ySpeed[i] * -0.85;
 y[i] = height-25;

  }
  println(counter);


 if(counter >= 17)
 {ySpeed[i]=0;
 y[i]=height-25;}
}


void display()
{
//draw ellipse
  ellipse(x[i],y[i],50,50);
}
}

 //using the class
 final int i = 9;
Ball[] Balle =  new Ball[10];

void settings()
{
  size(800,600);
}

void setup()
{

  Balle[i] = new Ball();
  for (int i = 0; i < Balle.length; i++)
  {Balle[i] = new Ball(x[i],y[i],50,50), i*4);
  }
      }

我认为这看起来很奇怪,因为它是从几个不同的帮助页面中挑选出来的...当前错误是

上的“变量x不存在”
{Balle[i] = new Ball(x[i],y[i],50,50), i*4);

我知道还有其他一些问题。

现在,我对弄清楚它的工作方式非常迷失。有人可以给我提示吗?

3 个答案:

答案 0 :(得分:0)

变量x不存在 -这是因为您没有将x作为全局变量,而是将其作为类变量,因此只能从内部访问Ball类或Ball类的一个实例。我不完全知道为什么要在x和y上使用数组,基元就可以了。并且不要忘了添加draw()方法,该方法在处理过程中用作“主循环”,它每0.x秒(frameRate)执行一次,因此您也必须使用它。您的其他函数,例如display()等,也可以从draw函数中调用。

答案 1 :(得分:0)

Geez,我什至在那里做什么?

这里是:

Ball[] balls = new Ball[10];

void settings()
{
  size(600,800);
}


void setup()
{
  for (int i = 0; i < balls.length; i++)
{
  balls[i] = new Ball();
}
}

void draw()
{ background(0);
 for (int i = 0; i < balls.length; i++)
 {
balls[i].move();
balls[i].display();
}
}

这样编程,是在黑暗中绊倒,直到被砖块击中...?

答案 2 :(得分:-1)

这是伪代码。

如果球<=底部,则反转球的速度。 (这意味着当它撞到地板上时,速度会反转。将其乘以-1)

否则,speedOfBall =速度-(重力*时间);

您可以轻松地根据坐标计算位移,即s =速度*时间+ .5 *重力*时间^ 2。