我是新手,正在做有关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);
我知道还有其他一些问题。
现在,我对弄清楚它的工作方式非常迷失。有人可以给我提示吗?
答案 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。