0

Game1 クラスの switch ブロックでこれら 3 つのエラー メッセージが表示されますが、修正方法がわかりません。なにが問題ですか?名前 'IntroState' は現在のコンテキストに存在しません 名前 'MenuState' は現在のコンテキストに存在しません
名前 'MaingameState' は現在のコンテキストに存在しません

さらに、Intro クラスで次のエラー メッセージが表示されます。 The name 'IntroState' does not exist in the current context

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

    public enum GameStates
    {
        IntroState = 0,
        MenuState = 1,
        MaingameState = 2,
    }


    public void ChangeGameState(GameStates newState)
    {
        switch (newState)
        {
            case IntroState:
                currentState = new Intro(this);
                break;
            case MenuState:
                currentState = new Menu(this);
                break;
            case MaingameState:
                currentState = new Maingame(this);
                break;
        }
        currentState.Load(Content);
    }


    public GameStates CurrentState
    {
        get { return currentGameState; }
        set { currentGameState = value; }
    }

    private GameStates currentGameState = GameStates.IntroState;


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

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

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

    protected override void Update(GameTime gameTime)
    {
        currentState.Update(gameTime);     
        KeyboardState kbState = Keyboard.GetState();
        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
{
    Texture2D Introscreen;
    private Game1 game1;       

    public Intro(Game1 game)
    {
        game1 = game;
    }

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

    public void Update(GameTime gametime)
    {
        KeyboardState kbState = Keyboard.GetState();
        if (kbState.IsKeyDown(Keys.Space))
          game1.ChangeGameState(IntroState);
    }

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

3 に答える 3

1

試す:

switch (newState)
{
            case GameStates.IntroState:
                currentState = new Intro(this);
                break;
            case GameStates.MenuState:
                currentState = new Menu(this);
                break;
            case GameStates.MaingameState:
                currentState = new Maingame(this);
                break;
 }

IntroStateMenuStateおよびMaingameState列挙型に属します

于 2012-12-14T23:58:15.250 に答える
1

enum値は、type-name を前に付けた場合にのみ使用できます。

  //case IntroState:
    case GameStates.IntroState:

単独で使用することはできませんIntroState

于 2012-12-14T23:58:50.890 に答える
1

IntroStateとして参照する必要がありますGameStates.IntroState。同じことが他の2つにも当てはまります。

于 2012-12-14T23:58:56.803 に答える