对象不在if语句中工作

时间:2016-03-11 05:00:32

标签: oop animation processing

我试图制作单人游戏的pong版本。当玩家撞到墙壁时,墙壁会收缩。如果球员未命中球,则成为子弹并在比赛中添加另一个球。游戏还有更多内容,但我无法超越这一部分。我用球,子弹和新球对象定义了一个类。如果我在draw()的开头调用newBall()它将起作用。但是如果我把它放在我的if语句中(如果玩家错过了新球),它就不会显示。我知道if语句是正确的,因为bullet()工作正常。我确定这是一个明显的问题,但我无法让它发挥作用。

班级:

class balls {

  void ball() {
  fill(ellipseColor);  
  ellipse(x, y, 20, 20);
  }

  void bullet() {
    ellipseColor= color(224, 131, 81);
    ellipse(x, y, 20, 20);
    speedX = speedX * -1;
  }

  void newBall() {
    fill(ellipseColor);
    ellipse(newX, newY, 20, 20);

  }

if语句:

if(x > width-5 && (y < mouseY-75 || y > mouseY+ 75)) {
 b_1.bullet();
 b_1.newBall();
}

x,y,newX,newY:

x = x + speedX;
y = y + speedY;
newX= newX + newSpeedX;
newY= newY + newSpeedY;

1 个答案:

答案 0 :(得分:1)

newBall()函数唯一能做的就是为单个帧绘制一个椭圆。这不会做太多。

相反,您需要创建一个封装绘制Ball所需内容的类。保留该类的ArrayList个实例,并在想要添加Ball时添加实例。然后告诉球移动并画出自己。

以下是一个例子:

ArrayList<Ball> balls = new ArrayList<Ball>();

void setup(){
  size(500, 500);
}

void mouseClicked(){
  balls.add(new Ball(mouseX, mouseY));
}

void draw(){
 background(0);
 for(Ball ball : balls){
   ball.draw();
 }
}

class Ball{
  float x;
  float y;

  public Ball(float x, float y){
    this.x = x;
    this.y = y;
  }

  void draw(){
    y++;
    ellipse(x, y, 20, 20);
  }
}