0

好的,默认情况下,GameXNA PC 游戏的类有一个名为 的公共 bool 属性IsMouseVisible,当设置时启用/禁用鼠标可见。我有另一个类Configs,它监视被按下的特定键。现在我要做的是设置它,以便当我按下特定键时,它会改变IsMouseVisible. 这就是我卡住的地方,因为我不知道如何更改另一个类的值。

我知道我可以在Configs类中创建一个 bool 值并使其在按下键时更改,然后使其在主Game类更新时将值设置为IsMouseVisibleConfigs 类值,但问题是,我可能想要创建多个不同的值(不仅仅是IsMouseVisible),这些值可以Game从另一个类在主类中设置。

还有我的问题,我怎么能在Game另一个类的主类中设置一些东西?(无需为我希望访问的每个值创建多个更新。)

4

3 回答 3

3

在主类的构造函数中创建对象“Configs”。执行此操作时,为 Config 对象提供对主类的引用。现在 Configs 可以访问主类的值。

于 2013-01-22T02:21:03.427 回答
1

您需要将游戏类的引用传递给 Configs 类。在 Configs 的类构造函数中,为游戏类的实例设置一个私有成员变量。从那里你可以操纵游戏。见下文:

游戏课

public class Game1 : Game
{
    Configs configs; 

    GraphicsDeviceManager _graphics;
    SpriteBatch _spriteBatch;

    public Game1()
    {
        _graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {
        // Pass THIS game instance to the Configs class constructor.
        configs = new Configs(this);
        base.Initialize();
    }

    protected override void LoadContent()
    {
        _spriteBatch = new SpriteBatch(GraphicsDevice);
    }

    protected override void UnloadContent()
    {
    }

    protected override void Update(GameTime gameTime)
    {
        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        base.Draw(gameTime);
    }
}

配置类

public class Configs
{
    // Reference to the main game class.
    private Game _game;

    public Configs(Game game)
    {
       // Store the game reference to a local variable.
        _game = game;
    }

    public void SetMouseVisible()
    {
        // This is a reference to you main game class that was 
        // passed to the Configs class constructor.
        _game.IsMouseVisible = true;
    }
}

这基本上是其他人一直在说的。但是,您似乎很难在没有看到一些代码的情况下理解这些概念。因此,我提供了它。

希望有帮助。

于 2013-01-22T03:26:55.547 回答
0

三件事,它们都与您对@Patashu 答案的评论有关:

首先,如果将Game对象传递给构造函数,则不需要将其设置为 ref 类型参数,因为它是通过引用自动传递的(由于是对象)。

其次,您的GameComponent子类需要Game在其默认构造函数中引用该对象的原因......是它已经有一个Game内置的引用。在您的Configs班级中,调用this.Game That is the main Gameinstance。

第三,如果你的构造函数已经接收到一个对象的一个​​参数,它就不需要同一个对象的同一个实例的另一个参数。

阅读文档。 这很有用。

于 2013-01-22T03:12:16.187 回答