2012-07-24 6 views
1

좋아 브레이크 아웃에서 읽을 나는 종료 결코이 게임 루프가있어 내가 턴 값을 볼이있는 모든 시간을 감소시키는이 방법에도 불구하고 놓친 :카운터

private void checkForCollision() { 
    GObject collider = getCollidingObject(); 
    if (collider !=null) { 
     if (collider == Paddle) { 
      vy= -vy; 
     } 
     else { 
      vy= -vy; 
      remove(collider); 
      TotalBricks = TotalBricks - 1; 
     } 
    } 
    if((ball.getX()>=(WIDTH-BALL_RADIUS)) || (ball.getX()<=0)) { 
     vx = -vx; 
    } 
    if(ball.getY()<=0) { 
     vy = -vy; 
    } 
    if(ball.getY()>=HEIGHT) { 
    Turns = Turns -1; 
    remove(ball); 
    newBall(); 
    } 

} 

플러스 하단에이

private int Turns; 

을 변수가 오전 공유 될 수 있도록 두 가지 방법 모두. 공을 놓친 횟수에 관계없이 게임은 결코 멈추지 않습니다. 내가 무엇이 누락 되었습니까? Thx

+0

조금만 참고로, 그것은 다른 사람들이 올바른 해결책을 알려 답변을 받아 항상 좋은 생각이야! :) – ardent

답변

0

당신하여 run() 방법에 대해 한 번 전체 클래스에 대해 한 번, 두 번 Turns 변수를 선언하고 있습니다. run() 메서드에서 선언 한 Turns 변수의 값도 확인하므로 checkForCollision()에서 사용되는 값이 while 루프에서 검사되는 값이 아니기 때문에 값이 감소하지 않습니다.

run()에서

이 :

int Turns = NTURNS; 

필요가되게합니다 :

Turns = NTURNS; 
+0

감사합니다. 그리고 그걸로 내 게임이 완성되었고 이제는 엄마와 아빠에게 팔 수 있습니다. – dwilbank

4

실행 방법에서 새로운 Turns 변수가 선언됩니다. 이는 로컬 범위가 더 넓기 때문에 해당 메서드에서 사용중인 변수입니다. 이를 가변 섀도 잉이라고합니다. Eclipse와 같은 적절한 Java IDE를 사용하면 이렇게 할 때 경고 메시지가 표시됩니다. 거의 항상 실수입니다.

http://www.xyzws.com/Javafaq/what-is-variable-hiding-and-shadowing/15

+0

아 좋은 - 드디어 뭔가 읽을! 감사! 이제 루프가 멈추고 있습니다. 이 그림자는 지금 두 번 나에게 비트가있다. – dwilbank