0

デフォルトではGame、XNA PC ゲームのクラスには public bool 属性がIsMouseVisibleあり、これを設定すると、マウスの表示を有効または無効にできます。Configs特定のキーが押されていることを監視する別のクラスがあります。ここでやりたいことは、特定のキーを押すと の値が変わるように設定することですIsMouseVisible。別のクラスから値を変更する方法がわからないため、ここで行き詰まります。

クラスでbool値を作成してConfigs、キーが押されたときに値が変化するようにしてから、メインGameクラスが更新されたときに値をIsMouseVisibleConfigsクラスに設定できることを知っています。値ですが、別のクラスからIsMouseVisibleメインクラスに設定できる複数の異なる値 ( だけでなく) を作成したい場合があります。Game

Gameそして私の質問があります.別のクラスからメインクラスに何かを設定するにはどうすればよいですか? (アクセス可能にしたい値ごとに複数の更新を作成する必要はありません。)

4

3 に答える 3

3

メイン クラスのコンストラクターでオブジェクト「Configs」を作成します。これを行っている間、Config オブジェクトにメイン クラスへの参照を与えます。これで、Config はメイン クラスの値にアクセスできます。

于 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

3つのこと、そしてそれらはすべて@Patashuからの回答に対するあなたのコメントに関連しています:

まず、Gameオブジェクトをコンストラクターに渡す場合、(オブジェクトであるため) 参照によって自動的に渡されるため、それを ref 型引数として設定する必要はありません。

次に、GameComponentサブクラスがGameデフォルトのコンストラクターでオブジェクトへの参照を必要とする理由は、オブジェクトへの参照が既にGame組み込まれているためです。あなたのConfigsクラスでthis.Game は、メインGameインスタンスであるそれを呼び出します。

第 3 に、コンストラクターがオブジェクトの 1 つの引数を既に受け取っている場合、同じオブジェクトの同じインスタンスの別の引数は必要ありません。

ドキュメントを読んでください。 便利です。

于 2013-01-22T03:12:16.187 に答える