GameplayScreen does not contain a definition for GraphicsDevice

Posted by Dave Voyles on Game Development See other posts from Game Development or by Dave Voyles
Published on 2012-05-15T20:49:02Z Indexed on 2012/09/27 21:52 UTC
Read the original article Hit count: 335

Filed under:
|

Long story short: I'm trying to intergrate my game with Microsoft's Game State Management. In doing so I've run into some errors, and the latest one is in the title. I'm not able to display my HUD for the reasons listed above.

Previously, I had much of my code in my Game.cs class, but the GSM has a bit of it in Game1, and most of what you have drawn for the main screen in your GameplayScreen class, and that is what is causing confusion on my part.

I've created an instance of the GameplayScreen class to be used in the HUD class (as you can see below). Before integrating with the GSM however, I created an instance of my Game class, and all worked fine.

It seems that I need to define my graphics device somewhere, but I am not sure of where exactly. I've left some code below to help you understand.

 public class GameStateManagementGame : Microsoft.Xna.Framework.Game
{
    #region Fields

    GraphicsDeviceManager graphics;
    ScreenManager screenManager;
            // Creates a new intance, which is used in the HUD class
    public static Game  Instance;


    // By preloading any assets used by UI rendering, we avoid framerate glitches
    // when they suddenly need to be loaded in the middle of a menu transition.
    static readonly string[] preloadAssets =
    {
        "gradient",
    };


    #endregion

    #region Initialization


    /// <summary>
    /// The main game constructor.
    /// </summary>
    public GameStateManagementGame()
    {
        Content.RootDirectory = "Content";

        graphics = new GraphicsDeviceManager(this);
        graphics.PreferredBackBufferWidth = 1280;
        graphics.PreferredBackBufferHeight = 720;
        graphics.IsFullScreen = false;
        graphics.ApplyChanges();

        // Create the screen manager component.
        screenManager = new ScreenManager(this);

        Components.Add(screenManager);

        // Activate the first screens.
        screenManager.AddScreen(new BackgroundScreen(), null);
        //screenManager.AddScreen(new MainMenuScreen(), null);
        screenManager.AddScreen(new PressStartScreen(), null);
    }


namespace Pong
{
    public class HUD
    {
        public void Update(GameTime gameTime)
        {

         // Used in the Draw method  
            titleSafeRectangle = new Rectangle
                (GameplayScreen.Instance.GraphicsDevice.Viewport.TitleSafeArea.X,
                GameplayScreen.Instance.GraphicsDevice.Viewport.TitleSafeArea.Y,
                GameplayScreen.Instance.GraphicsDevice.Viewport.TitleSafeArea.Width,
                GameplayScreen.Instance.GraphicsDevice.Viewport.TitleSafeArea.Height);

        }
    }
}

   class GameplayScreen : GameScreen
{
    #region Fields
    ContentManager content;
    public static GameStates gamestate;
    private GraphicsDeviceManager graphics;
    public int screenWidth;
    public int screenHeight;
    private Texture2D backgroundTexture;
    private SpriteBatch spriteBatch;
    private Menu menu;
    private SpriteFont arial;
    private HUD hud;
    Animation player;


    // Creates a new intance, which is used in the HUD class
    public static GameplayScreen Instance;

   public GameplayScreen()
    {
       TransitionOnTime = TimeSpan.FromSeconds(1.5);
       TransitionOffTime = TimeSpan.FromSeconds(0.5);          
    }

    protected void Initialize()
    {

        lastScored = false;
        menu = new Menu();
        resetTimer = 0;
        resetTimerInUse = true;
        ball = new Ball(content, new Vector2(screenWidth, screenHeight));
        SetUpMulti();
        input = new Input();
        hud = new HUD();

        // Places the powerup animation inside of the surrounding box
        // Needs to be cleaned up, instead of using hard pixel values
        player = new Animation(content.Load<Texture2D>(@"gfx/powerupSpriteSheet"), new Vector2(103, 44), 64, 64, 4, 5);

        // Used by for the Powerups
        random = new Random();
        vec = new Vector2(100, 50);
        vec2 = new Vector2(100, 100);
        promptVec = new Vector2(50, 25);
        timer = 10000.0f; // Starting value for the cooldown for the powerup timer
        timerVector = new Vector2(10, 10);

        //JEP - one time creation of powerup objects
        playerOnePowerup = new Powerup();
        playerOnePowerup.Activated += PowerupActivated;
        playerOnePowerup.Deactivated += PowerupDeactivated;

        playerTwoPowerup = new Powerup();
        playerTwoPowerup.Activated += PowerupActivated;
        playerTwoPowerup.Deactivated += PowerupDeactivated;

        //JEP - moved from events since these only need set once
        activatedVec = new Vector2(100, 125);
        deactivatedVec = new Vector2(100, 150);
        powerupReady = false;


    }

© Game Development or respective owner

Related posts about XNA

Related posts about c#