2013-07-25 3 views
0

나는 이것이 매우 간단한 OO 질문이라고 생각하지만 답변을 찾지 못하는 것 같습니다./ 공이로드되는 패널이 게임 패널에 있습니다. 공이 패널 하단에 닿으면 Game Over 메시지가 표시됩니다.GamePanel에서 메서드 호출하기

제가 다루고있는 문제는이 게임에 관한 것입니다. JOptionPane. 이 클래스에 보관해야한다고 생각하지만 Ball 클래스에서 호출해야합니다. 생성자가 내 게임 패널에서 볼 클래스에서 호출되고 여기에

private void moveBall() { 

    if (x == panel.getWidth() - size) { 
     xa -= speed; 
    } else if (x < 0) { 
     xa += speed; 
    } 

    if (y == panel.getHeight() - size) { 
     ya -= speed; 
    } else if (y < 0) { 
     ya += speed; 
    } 

    if (collision()) { 
     ya = -speed; 
     y = platform.getY() - DIAMETER; 
    } 

    if (y == panel.getHeight() - size) { 

     // ***Call gameOver here*** 

    } 
    x += xa; 
    y += ya; 
} 

:

다음

내가 (**로 표시) 메소드를 호출 할 Ball 클래스의 일부이다
// Constructor to pass a colour and a platform 
public Ball(JFrame frame, JPanel panel, Platform platform, Color colour, 
     int x, int y, int size) { 

    this.platform = platform; 

    this.frame = frame; 
    this.panel = panel; 
    this.colour = colour; 

    // Location of the ball 
    this.x = x; 
    this.y = y; 

    // Size of the ball 
    this.size = size; 

    animator = new Thread(this); 
    animator.start(); 
} 

어떻게하면 해당 방법에 액세스 할 수 있습니까?

주 (구조) : 프레임 -> 제어판 -> 볼

감사

내가 설명하지 않은 경우 나 잘 자신을 알려 또는

답변

2

이의 위치를보고 고려하면 자세한 정보가 필요 gameOver 함수에 액세스 할 수있는 다른 클래스의 공입니다. 이렇게하면 패널을 Ball 클래스에 노출 할 필요가 없으며 문제가 방지됩니다. 이 JFrame에 존재하지 않기 때문에이 현재의 접근 방식을 사용하려는 경우

또한

, 당신의 gameOver 함수를 호출 할 수 없습니다, 당신은 BallgameOver 기능을 포함하는 클래스 또는 인터페이스를 제공해야 건설자. 대신 당신의 Ball 클래스가 Frame 또는 Panel 클래스에서 메소드를 호출 갖는

+0

그래서 그 클래스에서 GamePanel의 새로운 인스턴스를 생성 한 다음 볼 클래스에 해당 클래스의 인스턴스를 만들 필요가 없습니까? – Katana24

+0

GamePanel을 한 번 만들면 원하는 곳에 전달할 수 있습니다. 다시 만들 필요가 없습니다. – Jonatan

+0

자바가 어떻게 작동하는지 실제로 생각할 때 그와 같은 간단한 대답으로 간단한 질문. 끝난. 저 주셔서 고마워. – Katana24

1

, 당신이 원하는 것을 달성하기 위해 더 나은 방법은/당신의 볼이있는 경우에 대한 부울을 설정 표시하여 Ball 클래스의 메소드를 가질 생각 화면의 하단을 누르십시오. 그런 다음 공이 화면 하단에 닿으면이 메서드를 실행시킵니다 (현재 메서드 호출을 통해 게임을 배치하려는 위치).

거기에서 gameover 메소드에 액세스 할 수있는 클래스에서 메소드를 통해 게임을 실행해야하는지 여부를이 표시기/부울 값으로 확인하십시오.

관련 문제