2013-07-17 2 views
0

C#에서하는 방법을 알아 내지 못했던 것 :하위 개체의 상위 수준 변수/개체에 액세스하려면 어떻게해야합니까?

두 클래스 Game.cs와 Player.cs가 있다고 가정 해 봅시다.

Game.cs에 속한 모든 항목은 Player.cs에 속한 모든 함수의 인수를 통해 전달되어야합니다. 예를 들어, 게임에 사운드 효과가로드되고 Player가 Game의 하위 요소이고 Player에 "PlaySoundEffect()"기능이있는 경우 Player가 해당 사운드에 액세스 할 수있는 유일한 방법은 인수를 통해 전달하는 것입니다.

  1. 가 어떻게 인수로를 포함하지 않고 객체 (들)에 액세스 할 수 있습니다 : "PlaySoundEffect (SoundEffect 소리)"

    는 내가 알고 싶은 것은 이것이다?

  2. 소리가 Game에 있더라도 왜 "Game.sound"처럼 액세스 할 수 없습니까?

답변

0

그냥 전역 당신의 게임 클래스 static 변수를 확인하십시오.

는 EG, Game.cs에
SoundEffect sound;

static SoundEffect sound;

지금 플레이어 클래스는 단지
Game.sound.Play();
을하거나 무엇이든이 필요로 할 수됩니다.

+0

고마워요! 이것은 트릭을했다. 나는 SoundEffect를 대중에게 정적으로 만들어야했습니다. – user2593449

0

sound는 특정 인스턴스 Game의 속성이다.

특정 인스턴스에서만 가져올 수 있습니다.

Game 인스턴스를 Player의 속성으로 추가하여 각 플레이어가 게임에 참조 할 수 있도록 할 수 있습니다.

+0

응답 해 주셔서 감사합니다. XNA가 메인 게임 클래스를 처리하는 방법에 대해서는 아직 확실하지 않지만 정적이라고 생각하지는 않습니다. 게임이 인스턴스인지 여부는 알 수 없습니다. 누구든지 명확히 할 수 있습니까? – user2593449

+0

@ user2593449 : 나는 XNA를 사용한 적이 없지만 정적 및 인스턴스는 반대입니다. 하나는 정적 클래스이고 다른 모든 멤버는 정적이며 코드가 작동하거나 적어도 인스턴스가있는 일반 클래스입니다. 후자가 훨씬 더 가능성이 있습니다. – SLaks

0

이 아니기 때문에 액세스 할 수 없습니다.

그러나

당신은 이것을 랩핑하여 플레이어에게 전달할 수 있습니다. 이런 식으로 뭔가가 : - 그들은 게임 인스턴스에 포함되지 않으며, 대신에 전 세계적으로 액세스 할 수있는, 의미

class GameSoundManager { 
    public SoundEffect PlayerDie { get; set; } 
} 

class Game { 
    private GameSoundManager _soundManager; 
    private Player _player; 

    public Game() { 
     _soundManager = new GameSoundManager() { 
      PlayerDie = // load the sound 
     }; 

     _player = new Player(_soundManager); 
    } 
} 

class Player { 
    private GameSoundManager _soundManager; 

    public Player(GameSoundManager soundManager) { 
     _soundManager = soundManager; 
    } 

    // use _soundManager.PlayerDie anywhere in your player class. 
} 
관련 문제