2017-04-08 18 views
-1

私のJavaブレイクアウトゲームの衝突検出をコーディングする際に少し問題があります。私は上の衝突をうまくしようとしているメソッドは、このいずれかになります。私はレンガからX & Yを取得しようとしたとき、私は問題を抱えています上記の方法からしかしJava BreakOut衝突検出 - シンボルが見つかりません

public void runAsSeparateThread() 
     { 
      final float S = 3; // Units to move (Speed) 
      try 
      { 
       synchronized (Model.class) // Make thread safe 
       { 
        GameObj  ball = getBall();  // Ball in game 
        GameObj  bat = getBat();  // Bat 
        List<GameObj> bricks = getBricks(); // Bricks 
       } 

       while (runGame) 
       { 
        synchronized (Model.class) // Make thread safe 
        { 
         float x = ball.getX(); // Current x,y position 
         float y = ball.getY(); 

         // Deal with possible edge of board hit 
         if (x >= W - B - BALL_SIZE) ball.changeDirectionX(); 
         if (x <= 0 + B   ) ball.changeDirectionX(); 
         if (y >= H - B - BALL_SIZE) // Bottom 
         { 
          ball.changeDirectionY(); addToScore(HIT_BOTTOM); 
         } 
         if (y <= 0 + M   ) ball.changeDirectionY(); 

         // As only a hit on the bat/ball is detected it is 
         // assumed to be on the top or bottom of the object. 
         // A hit on the left or right of the object 
         // has an interesting affect 

         boolean hit = false; 

         if (y <= bricks.getY() - (brickHeight/2)){ 
          hit = true; 
         } 
         if (y >= bricks.getY() - (brickHeight/2)){ 
          hit = true; 
         } 
         if (x < bricks.getX()){ 
          hit = true; 
         } 
         if (x > bricks.getX()){ 
          hit = true; 
         } 

         if (hit) 
          ball.changeDirectionY(); 

         if (ball.hitBy(bat)) 
          ball.changeDirectionY(); 
        } 
        modelChanged();  // Model changed refresh screen 
        Thread.sleep(fast ? 2 : 20); 
        ball.moveX(S); ball.moveY(S); 
       } 
      } catch (Exception e) 
      { 
       Debug.error("Model.runAsSeparateThread - Error\n%s", 
        e.getMessage()); 
      } 
      } 

。それは "シンボルを見つけることができません - メソッドgetY()"を返し続けます。しかし、この方法は、バットとボールのために働くようだが、レンガに対してこのエラーを投げるだけである。

このエラーは、コードのこの部分でスローされます。

boolean hit = false; 

if (y <= bricks.getY() - (brickHeight/2)){ 
    hit = true; 
} 
if (y >= bricks.getY() - (brickHeight/2)){ 
    hit = true; 
} 
if (x < bricks.getX()){ 
    hit = true; 
} 
if (x > bricks.getX()){ 
    hit = true; 
} 

誰もが、私はそれを徹底的に感謝助けることができれば!

UPDATE

for (int i = 0; i <= 60; i++){ 
        GameObj brick1 = bricks.get(i); 

        if (y <= brick1.getY() - (BRICK_HEIGHT/2)){ 
         hit = true; 
         Debug.trace("BreakOut"); 
        } 
        if (y >= brick1.getY() - (BRICK_HEIGHT/2)){ 
         hit = true; 
         Debug.trace("BreakOut"); 
        } 
        if (x < brick1.getX()){ 
         hit = true; 
         Debug.trace("BreakOut"); 
        } 
        if (x > brick1.getX()){ 
         hit = true; 
         Debug.trace("BreakOut"); 
        } 
       } 
+0

[** minimal **、完全で検証可能な例](/ help/mcve)を作成してください。手元にある問題に関係のないすべてのコードを整理してください。 –

+0

[シンボルが見つかりません]のコンパイルエラーの意味は?](http://stackoverflow.com/questions/25706216/what-does-a-cannot-find-symbol-compilation-error-mean) –

+1

あなたのbricks変数は 'java.util.List'変数ですので、' getY() 'メソッドを持たないことに意味があります。 'get(int i)'を使ってListからオブジェクトを取得し、 'getY()'を呼び出す必要があります。 –

答えて

2
private List<GameObj> bricks; // The bricks 

bricks多くのレンガのリストです。どのレンガでポジションをしたいですか?

+0

私は個々のものを通過する必要がありますか、またはより速い方法がありますか? – Vacation

+0

すべてをループする必要があります。スピードを心配しないで、速くなるでしょう。 –

+0

私はこれを進めてこれを行ったが、うまくいかない。私は更新で投稿を編集しました – Vacation

関連する問題