2017-06-13 7 views
0

私はBlueJでプログラムしようとしているゲームでいくつかの問題を抱えています。これまでのところ、私はボールが跳ね返り、パドルが私のマウスで動き回ることができます。私はボールを基本的にパドルから跳ね返ろうとしています。移動するパドルのボールをバウンスする方法

私は3つのクラスを持っていますが、私はその長いことを知っていますが、実際にはいくつかの助けを使うことができます。

public class MAIN { 

    public void begin(){ 
     Paddle = new Paddle(140,400,100,canvas); 
     ball = new Ball (180,50,canvas, Paddle)//ball can recognize paddle 
    } 

    public void onMousemove (Location p){ 
     Paddle.move(p); 
    } 
} 

public class Paddle { 

    public Paddle (int x, int y, int s, DrawingCanvas c){ 
     ((JDrawingCanvas)c).setBackground(Color.green); 
     paddle = new FilledRect(x,y,s,10,c); 
    } 
    public void move (Location p){ 
     paddle.moveTo(p.getX(),p.getY()); 
    } //paddle, and to move paddle 
} 

public class Ball { 

    Drawing Canvas myCanvas; 
    FilledRect paddle; 
    FilledOval ball; 
    int dx = 3, dy = 5; 

    public Ball (int x, int y, int s, DrawingCanvas c, Paddle paddle){ 
     myCanvas = c 
     ((JDrawingCanvas)c).setBackground(Color.green); 
     ball = new FilledOval (x,y,s,s,c); 
     pad = paddle; 

     start(); 
    } 

    public void run() //bounces the ball around 
    { 
     while(true){ 
      if(ball.getX() <0 ||ball.getX() > myCanvas.getWidth()){ 
      dx = dx; 
     } 
     if(ball.getY() <0 ||ball.getY() > myCanvas.getWidth()){ 
      dy = dy; 
     } 
     move5(); 
     pause(20); 
    } 

    public Rectangle getRectangle(){ 
     return new Rectangle ((int)paddle.getX(), paddle.getY(), 
     paddle.getWidth(), paddle.getHeight(); 
    } 

    public boolean collision (Ball p){ 
     return getRectangle().intersects(p.getRectangle()); 
    } 

    public void move5(){ 
     ball.move(dx,dy) 
    } 

    public void collide(){ 
     dx= -dx 
     dy=-dy 
    } 
} 
+0

ボールがパドルに接触しているかどうかを検出するために、画面の両側に使用されている同じ衝突検出を使用することができます。 –

答えて

0

ボールにヒットボックスを使用しないでください。各フレームがパドルの上部境界または下部境界と重なっているかどうかを確認してください。そうであれば、ボールの速度を反転させます。 x軸と同じです。

ボールの座標(y軸上にあると言う)からその半径を引いた値がラインのy座標より小さく、ボールのy座標+その半径がリムのy座標より大きい場合、ボールはラインと衝突していますボールのx座標+ - 半径は、ラインの終点のx座標より小さい/大きい。だから、基本的にボールがラインの端の間にあり、それよりもラインから離れていないかどうかを自分の半径よりも確認します。その場合、ボールはパドルの境界に衝突した。

関連する問題