-1

別のクラスでExit()を使用するにはどうすればよいですか?Introクラスで使用したいのですが、「menuinterface.Menu.exit」が割り当てられることはなく、常にデフォルト値の「null」エラーメッセージが表示されます。なにが問題ですか?

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    private IState currentState;

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

    protected override void Initialize()
    {
        currentState = new Intro();
        base.Initialize();
    }

    protected override void LoadContent()
    {       
        spriteBatch = new SpriteBatch(GraphicsDevice);
        currentState.Load(Content);
    }

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

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
        currentState.Render(spriteBatch);
        spriteBatch.End();

        base.Draw(gameTime);
    }
}

public interface IState
    {
        void Load(ContentManager content);
        void Update(GameTime gametime);
        void Render(SpriteBatch batch);
    }

public class Intro : IState
{
    private IState currentState;
    private Game1 exit;
    Texture2D introscreen;

    public void Load(ContentManager content)
    {
        introscreen = content.Load<Texture2D>("intro");
    }

    public void Update(GameTime gametime)
    {
        KeyboardState kbState = Keyboard.GetState();
        if (kbState.IsKeyDown(Keys.Space))
          currentState = new Menu();
        if (kbState.IsKeyDown(Keys.Escape))
            exit.Exit();
    }

    public void Render(SpriteBatch batch)
    {
        batch.Draw(introscreen, new Rectangle(0, 0, 1280, 720), Color.White);
    }
}
4

2 に答える 2

0

exitタイプのように見えるオブジェクトには何も割り当てないGameため、このエラーが発生するのはこのためです。exitしかし、そもそもなぜこのオブジェクトが必要なのですか?

エスケープを押した後にゲームを終了したい場合は、Exit()メソッドを使用してください。コードのように使用する必要はありません。これと同じくらい簡単です:

public class Game1 : Microsoft.Xna.Framework.Game
{
    // ...
    protected override void Update(GameTime gameTime)
    {            
        if (kbState.IsKeyDown(Keys.Escape))
            Exit();  

        base.Update(gameTime);
    }
    // ...
}
于 2012-12-13T10:31:12.560 に答える
0

これがあなたの問題です:

public class Intro : IState
{
    private IState currentState;
    private Game1 exit;
    Texture2D introscreen;

    public void Load(ContentManager content)
    {
        introscreen = content.Load<Texture2D>("intro");
    }

    public void Update(GameTime gametime)
    {
        KeyboardState kbState = Keyboard.GetState();
        if (kbState.IsKeyDown(Keys.Space))
          currentState = new Menu();
        if (kbState.IsKeyDown(Keys.Escape))
            exit.Exit(); // ---- this object does not exist
    }

    public void Render(SpriteBatch batch)
    {
        batch.Draw(introscreen, new Rectangle(0, 0, 1280, 720), Color.White);
    }
}

このクラスでは、というオブジェクトを宣言していますexitが、この値が割り当てられることはありません。オブジェクトを使用する前に、オブジェクトをインスタンス化する必要があります。あなたの場合、問題を解決するために次のコンストラクターを追加します。

public Intro(Game1 game)
{
    exit = game;
}
于 2012-12-13T12:17:10.300 に答える