2012-07-01 3 views
1

내가 작업하고있는 게임에서 다른 클래스가 좌표를 조작하는 동안 스프라이트를 그리는 작업이 하나의 클래스에 있습니다 (예 : 스프라이트가 곧 사라지는 경우). 화면, 거기서 멈추십시오. 예, 이것이 벡터 그래픽이라는 것을 압니다.) 어쨌든, 두 클래스간에 좌표를 공유해야합니다. 클래스 확장을 사용하여이 작업을 시도했지만 슈퍼 클래스 (스프라이트를 그리는 클래스)가 하위 클래스 (변수를 조작 할 클래스)의 인스턴스를 만들어야하기 때문에 스택 오버플로가 생성되었습니다.확장자가없는 클래스간에 변수를 공유하는 방법

// In the superclass Render 
public AnimateMC mc = new AnimateMC(2); // AnimateMC is the subclass of the 
              superclass, Render 
//later in the program 
//code for drawing all of the shapes in the sprite 
mc.gravitizeY(); // this is why I need to make an instance of AnimateMC 

// In the subclass AnimateMC 
// animates sprite by changing the coordinates 

하나의 클래스를 확장하지 않고도 두 클래스간에 정수 변수 좌표를 공유 할 수있는 방법은 무엇입니까?

+0

게터 및 세터의 문제점은 무엇입니까? 그것은 당신의 모범에서 완전히 분명한 것은 아니지만, 당신은이 문제를 거의 과소 평가할 것입니다. 이것은 매우 일반적인 문제입니다. 더 자세한 예제를 게시 할 수 있습니까? – dimo414

+0

나는 게터와 세터를 다루지 않았다. 나는 여전히 고등학생이다. 그게 뭐야? – kullalok

+0

아주 간단한 아이디어로, 하나의 객체 (클래스가 아니라 조심하세요. 사용하는 용어가 중요합니다)는 좌표를 유지하고 두 번째 객체로 호출하여 전달할 수있는 getCoordinates() 메소드를가집니다. – dimo414

답변

4

당신은 상속의 오용으로이 문제가 해결되지 않는다는 것을 알게되었습니다. 대신 컴포지션을 확장하십시오. 하나의 객체에서 다른 객체로 스프라이트에 대한 참조를 전달하고 참조로 작업하십시오.

그래서 스프라이트 스프라이트 변수, 스프라이트에 액세스하는 데 필요한 클래스를 제공 한 다음 setter 메소드를 통해 스프라이트 참조를 전달, 즉,

public void setSprite(Sprite sprite) { 
    this.sprite = sprite; 
} 

또는 클래스의 생성자를 통해 설정 .

3

이것은 기본 Model View Controller 질문이며, 내 생각 엔 '컨트롤러'부분이 누락 된 것입니다. 게임 로직 (모델)과 디스플레이 로직 (뷰)을 관리하고 이들 사이에서 데이터를 공유하는 일을하는 중심 클래스가 필요합니다. 저기 리소스가 많이있어, 위키 피 디아의 문서에 링크 된 좋은 시작입니다.

당신이 질문을 표현한 방식에서, 나는 당신이 아직 개체 상속에 대해 강력하게 이해하지 못하고 있다고 생각합니다. - 괜찮습니다. 완전히 간단하지는 않습니다.하지만 데이터를 공유하기 위해 객체를 확장하고 싶지는 않을 것입니다. 두 개의 다른 클래스 사이에서, 당신이 여기에서하려고하는 것처럼 들리는 것입니다.

"이 객체를 확장해야합니까?" Has-A vs. Is-A 관계입니다. 기본적으로 객체 Is-A 다른 객체 인 경우 다른 객체를 확장해야합니다. 그렇지 않다면, 그들은해서는 안됩니다. Car Is-A Vehicle라고 생각하면 Car extends Vehicle이지만 Car Has-A Sunroof이므로 SunroofCar을 확장하면 안됩니다. 다시, 링크를 읽어보십시오.

+0

훌륭한 조언. 1+ –

관련 문제