I get these three error messages in the switch block of Game1 class but I don’t know how to fix them. What is wrong?
The name ‘IntroState’ does not exist in the current context
The name ‘MenuState’ does not exist in the current context
The name ‘MaingameState’ does not exist in the current context
In addition, I get this error message in the Intro class:
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);
}
}
An
enumvalue can only be used when prefixed with the type-name:you can never use
IntroStateon its own.