我从未想过如何在C#中做的事情如下:
假设我有两个类:Game.cs和Player.cs。
我发现任何属于Game.cs的东西都必须通过属于Player.cs的任何函数的参数传递。例如,如果我在Game中加载了声音效果,并且Player是Game的孩子,并且Player具有“PlaySoundEffect()”功能,那么Player可以访问该声音的唯一方法是通过参数传递它: “PlaySoundEffect(SoundEffect sound)”
我想知道的是:
答案 0 :(得分:0)
sound
是Game
的任何特定实例的属性。
您只能从特定实例获取它。
相反,您可以将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();
或者它需要什么。