C# 如何访问子对象中的高级变量/对象?
下面是我在C#中从未想到的方法: 假设我有两个类:Game.cs和Player.cs 我发现属于Game.cs的任何内容都必须通过属于Player.cs的任何函数的参数传递。例如,如果我在游戏中加载了一个声音效果,并且玩家是游戏的孩子,并且玩家有一个函数“PlaySoundEffect()”,那么玩家可以访问该声音的唯一方法是通过参数:“PlaySoundEffect(SoundEffect sound)” 我想知道的是:C# 如何访问子对象中的高级变量/对象?,c#,function,oop,xna,C#,Function,Oop,Xna,下面是我在C#中从未想到的方法: 假设我有两个类:Game.cs和Player.cs 我发现属于Game.cs的任何内容都必须通过属于Player.cs的任何函数的参数传递。例如,如果我在游戏中加载了一个声音效果,并且玩家是游戏的孩子,并且玩家有一个函数“PlaySoundEffect()”,那么玩家可以访问该声音的唯一方法是通过参数:“PlaySoundEffect(SoundEffect sound)” 我想知道的是: 如何访问对象而不将其作为参数 为什么我不能像这样访问它们:“游戏。声音”
声音
是游戏
的任何特定实例的属性
您只能从特定实例获取它
相反,您可以添加一个
游戏
实例作为玩家
的属性,这样每个玩家都有一个对其游戏的引用。您无法访问它们,因为它们不是静态的
但是,
你可以把它们包起来,传给球员。大概是这样的:
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.
}
只需在游戏类中设置任何全局变量
静态
——也就是说,它们不是游戏实例的一部分,而是全局可访问的
例如,在游戏中.csSoundEffect声音代码>
变成
静态音效声音代码>
现在,您的玩家类只需执行
Game.sound.Play()代码>
或者它需要的任何东西。谢谢您的回复!目前我不确定XNA如何处理主游戏类,但我不认为它是静态的,我也不知道这个游戏是否是一个实例。有人能澄清一下吗?@user2593449:我从未使用过XNA,但static和instance是对立的。要么它是一个静态类,并且它的所有成员都是静态的,您的代码可以工作,要么它是一个至少具有实例的常规类。后者更有可能。谢谢!这就成功了。我需要把音效变成一个公共静态效果。