2016-12-26 33 views
0

我新的android。试图实现彼此的弹跳球。像thisAndroid Canvas.How要计算循环中心之间的差异?

我BouncingBallView类的样子:

private ArrayList<Ball> balls; 

public BouncingBallView(Context context) { 
    super(context); 
    this.balls = new ArrayList<>(); 


    for(int i=0; i<2; i++) 
     this.balls.add(addBall()); 
} 

public Ball addBall(){ 

    Ball ball; 

    // Init the ball at a random location (inside the box) and moveAngle 
    Random rand = new Random(); 
    int radius = 60; 
    int x = rand.nextInt(500 - radius * 2 - 20) + radius + 10; 
    int y = rand.nextInt(800- radius * 2 - 20) + radius + 10; 
    int speed = 10; 
    int angleInDegree = rand.nextInt(360); 

    ball = new Ball(x, y, radius, speed, angleInDegree); 

    return ball; 
} 

@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    for(int i=0; i < balls.size(); i++) 
     balls.get(i).draw(canvas); 

    for(int i=0; i < balls.size(); i++){ 

     balls.get(i).intersect(canvas); 
     // Update the ball's state with proper collision response if collided. 
     balls.get(i).update(); 
    } 

    for(int i=0; i<balls.size(); i++){ 
     balls.get(i).collide(balls); 

    } 


    invalidate(); 
} 

和类球有冲撞的方法();

public void collide(ArrayList<Ball> balls){ 
    //Log.d("TEst", "LOG"); 

    // Calculate difference between centres 
    float distX = balls.get(0).getBallX() - balls.get(1).getBallX(); 
    float distY = balls.get(0).getBallY() - balls.get(1).getBallY(); 

    // Get distance with Pythagora 
    double dist = Math.sqrt((distX * distX) + (distY * distY)); 

    float r = ballRadius + ballRadius; 
    if ((float) dist <= r) { 
     Log.d("Collide", "Detected"); 
     this.ballSpeedX = -this.ballSpeedX; 
     this.ballSpeedY = -this.ballSpeedY++; 
    } 
    /*for(int i=0; i < balls.size(); i++) { 

     for(int j=1; j<balls.size(); j++) { 
      // Calculate difference between centres 
      float distX = balls.get(i).getBallX() - balls.get(j).getBallX(); 
      float distY = balls.get(i).getBallY() - balls.get(j).getBallY(); 

      // Get distance with Pythagora 
      double dist = Math.sqrt((distX * distX) + (distY * distY)); 

    *//*double distance = Math.sqrt(((balls.get(0).getBallX() - balls.get(1).getBallX()) * (balls.get(0).getBallX() - balls.get(1).getBallX())) + ((balls.get(0).getBallY() 
       - balls.get(1).getBallY()) * (balls.get(0).getBallY() - balls.get(1).getBallY())));*//* 

      float r = ballRadius + ballRadius; 
      if ((float) dist <= r) { 
       Log.d("Collide", "Detected"); 
       this.ballSpeedX = -this.ballSpeedX; 
       this.ballSpeedY = -this.ballSpeedY++; 
      } 
     } 
    }*/ 

} 

在这里,我使用的毕达哥拉斯定理,一个^ 2 + B^2 = C^2,找出两个圆之间的距离中心。如何计算球数是否> 2.我尝试循环,但效果很差(冰球)。

的完整代码,你可以找到github

现在想在这个视频my bouncing ball video

THX的工作有所帮助;)

P.S对不起这么糟糕的英语。

回答

0

你可以在每个阶段有一个球的计数器,当一个球被摧毁时(如果你摧毁它们),你可以改变计数,你可以在碰撞方法中检查(计数器)。

但我不是你需要检查这种情况,如果碰撞发生然后确定否则什么都不应该发生这种方法。