如何访问子对象中的更高级别变量/对象?

时间:2013-07-17 23:35:51

标签: c# function oop xna

我从未想过如何在C#中做的事情如下:

假设我有两个类:Game.cs和Player.cs。

我发现任何属于Game.cs的东西都必须通过属于Player.cs的任何函数的参数传递。例如,如果我在Game中加载了声音效果,并且Player是Game的孩子,并且Player具有“PlaySoundEffect()”功能,那么Player可以访问该声音的唯一方法是通过参数传递它: “PlaySoundEffect(SoundEffect sound)”

我想知道的是:

  1. 如何在不将它们作为参数包含的情况下访问对象?
  2. 为什么我不能像这样访问它们:“Game.sound”,即使声音在游戏中?

3 个答案:

答案 0 :(得分:0)

soundGame的任何特定实例的属性。

您只能从特定实例获取它。

相反,您可以将Game实例添加为Player的属性,以便每个玩家都可以参考其游戏。

答案 1 :(得分: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.
}

答案 2 :(得分:0)

只需在游戏类static中创建任何全局变量 - 这意味着它们不是游戏实例的一部分,而是可全局访问。

EG,在Game.cs中 SoundEffect sound;
成为
static SoundEffect sound;

现在你的玩家类可以做到 Game.sound.Play();
或者它需要什么。