0

我从未想过如何在 C# 中执行以下操作:

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

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

我想知道的是:

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

3 回答 3

0

sound是 的任何特定实例的属性Game

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

相反,您可以添加一个Game实例作为 的属性Player,以便每个玩家都有对其游戏的引用。

于 2013-07-17T23:39:32.467 回答
0

您无法访问它们,因为它们不是static

但,

您可以将它们包装起来,然后将它们传递给播放器。像这样的东西:

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.
}
于 2013-07-17T23:42:12.837 回答
0

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

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

现在你的玩家类可以做
Game.sound.Play();
任何它需要的事情。

于 2013-07-18T00:24:41.973 回答