2011-09-15 4 views
0
나는 간단한 게임을하고 있어요

의 인스턴스의 이름 난이에 stucked있어 : (XNA, 비주얼 기본 2010) 메인 클래스

내가 (예를 들어) 모든 벽의 목록 GAME1라는 메인 클래스가 두 번째 클래스의 공. 볼 클래스에서 충돌 감지를하고 있습니다. Game1 클래스의 벽 목록에 액세스해야하지만 어떻게 Game1 클래스의 인스턴스가 아직 없는지 알 수 없으며 이름을 알 수 없습니다.

희망 설명이 충분합니다.

+0

에 인스턴스가없는 경우 다음에 액세스 할 수 없습니다 인스턴스 멤버. 만약 그 클래스의 인스턴스가 하나 이상 존재하지 않는다면 멤버는'Shared'이어야합니다.이 경우에는 Game1.Walls를 사용하여이리스트에 접근 할 수 있습니다. –

답변

1

Game1 클래스는 Program 클래스로 인스턴스화됩니다. 볼 클래스를 생성하는 동안 생성자의 볼에 게임을 전달할 수 있습니다. 당신은 벽의 목록을 전달하려는 경우

public class Ball 
{ 
    Game1 myGame; 

    public Ball(Game1 _theGame) 
    { 
     myGame = _theGame; 
    } 
} 

public class Game1 : Game 
{ 
    Ball ball; 
    public override LoadContent() 
    { 
     // construct the ball with THIS. 
     ball = new Ball(this); 
    } 
} 

는, 어쩌면 어떤 종류의 WallManager라는 클래스를 고려하고 대신 전체 게임의, 당신의 공 클래스에 THAT를 전달합니다.

편집 :

또는 클래스가 GameComponent 경우, 당신은 구성 요소의 Game을 요청할 수 있습니다. 하지만 이것은 게임의 구성 요소에 볼 인스턴스를 추가하고 업데이트 기능을 제공해야하기 때문에 좋지 않습니다. 그리고 게임을 게임에 던져야합니다 1.

예 :

class Game1 : Game 
{ 
    Ball ball; 

    public override LoadContent() 
    { 
     ball = new Ball(); 
     this.Components.Add(ball); 
    } 
} 

class Ball: GameComponent 
{ 
    public override Update() 
    { 
     // ugly example 
     List<Wall> walls = ((Game1)this.Game).Walls; 
    } 
} 
+0

Marnix, 답장을 보내 주셔서 감사합니다. 첫 번째 솔루션이 작동합니다. 정말 기쁩니다. 인사말 : 체코 공화국 –

+0

내 대답이 마음에 들면 수락 버튼을 눌러이 질문을 닫을 수 있습니다. – Marnix

관련 문제