Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // I've included 3 of my classes in here. Gameplay Screen, Bat, and Input. I'm having difficulty getting my Gameplay Screen to recognize the inputs from my bats (paddles). I am receiving this error:
- 'MyXnaGame.Bat' does not contain a definition for 'Position' and no extension method 'Position' accepting a first argument of type 'MyXnaGame.Bat' could be found (are you missing a using directive or an assembly reference?)
- Should I be calling the input from my BAT class, or my Input class?
- #region File Description
- //-----------------------------------------------------------------------------
- // GameplayScreen.cs
- //
- // Microsoft XNA Community Game Platform
- // Copyright (C) Microsoft Corporation. All rights reserved.
- //-----------------------------------------------------------------------------
- #endregion
- #region Using Statements
- using System;
- using System.Threading;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Content;
- using Microsoft.Xna.Framework.Graphics;
- using Microsoft.Xna.Framework.Input;
- using Microsoft.Xna.Framework.Media;
- using Drawing;
- #endregion
- namespace MyXnaGame
- {
- /// <summary>
- /// This screen implements the actual game logic. It is just a
- /// placeholder to get the idea across: you'll probably want to
- /// put some more interesting gameplay in here!
- /// </summary>
- class GameplayScreen : GameScreen
- {
- #region Fields
- // Sprite mySprite;
- private Ball myBall;
- private Bat rightBat;
- private Bat leftBat;
- Input myInputClass;
- private Input batInput;
- HudContainer hudContainer = new HudContainer();
- SafeArea safeArea;
- Vector2 safeTopLeft = Vector2.Zero; // (2.0f * (safeArea.dx), 1.5f * (safeArea.dy));
- ContentManager content;
- SpriteFont gameFont;
- SpriteFont hudFont;
- private Texture2D backgroundTexture;
- public Song PlayingSong { get; private set; }
- Vector2 enemyPosition = new Vector2(100, 100);
- Random random = new Random();
- float pauseAlpha;
- #endregion
- #region Initialization
- /// <summary>
- /// Constructor.
- /// </summary>
- public GameplayScreen()
- {
- //
- safeArea = new SafeArea();
- // mySprite = new Sprite();
- TransitionOnTime = TimeSpan.FromSeconds(1.5);
- TransitionOffTime = TimeSpan.FromSeconds(0.5);
- }
- public override void LoadContent()
- {
- if (content == null)
- content = new ContentManager(ScreenManager.Game.Services, "Content");
- DrawingHelper.Initialize(ScreenManager.GraphicsDevice);
- myInputClass = new Input();
- //
- PlayingSong = content.Load<Song>(@"sfx/boomer");
- MediaPlayer.Play(PlayingSong);
- //
- backgroundTexture = content.Load<Texture2D>(@"gfx/mm7Background");
- //
- gameFont = content.Load<SpriteFont>("gamefont");
- hudFont = content.Load<SpriteFont>("menufont");
- //
- safeArea.LoadGraphicsContent(ScreenManager.GraphicsDevice);
- //
- hudContainer.LoadGraphicsContent(ScreenManager.GraphicsDevice, hudFont, safeArea);
- var hudScore = new HudTextComponent("SCORE: 100", HudComponent.PresetPosition.TopLeft);
- var hudHealth = new HudTextComponent("HEALTH: 300", HudComponent.PresetPosition.TopRight);
- var hudLives = new HudTextComponent("LIVES: 3", HudComponent.PresetPosition.MiddleLeft);
- var hudAmmo = new HudTextComponent("Ammo: 447", HudComponent.PresetPosition.MiddleRight);
- var hudName = new HudTextComponent("Angry Zombie...", HudComponent.PresetPosition.BottomLeft);
- var hudInfo = new HudTextComponent("...Ninja Cats!", HudComponent.PresetPosition.BottomRight);
- /* I've commented out the hud variables -DV
- hudContainer.Add(hudScore);
- hudContainer.Add(hudHealth);
- hudContainer.Add(hudLives);
- hudContainer.Add(hudAmmo); ;
- hudContainer.Add(hudName);
- hudContainer.Add(hudInfo);
- */ //
- // mySprite.LoadContent(content);
- myBall = new Ball(content, new Vector2 (ScreenManager.GraphicsDevice.Viewport.Width,
- ScreenManager.GraphicsDevice.Viewport.Height));
- rightBat = new Bat(content, new Vector2 (ScreenManager.GraphicsDevice.Viewport.Width,
- ScreenManager.GraphicsDevice.Viewport.Height), true);
- leftBat = new Bat(content, new Vector2(ScreenManager.GraphicsDevice.Viewport.Width,
- ScreenManager.GraphicsDevice.Viewport.Height), false);
- // A real game would probably have more content than this sample, so
- // it would take longer to load. We simulate that by delaying for a
- // while, giving you a chance to admire the beautiful loading screen.
- Thread.Sleep(1000);
- // once the load has finished, we use ResetElapsedTime to tell the game's
- // timing mechanism that we have just finished a very long frame, and that
- // it should not try to catch up.
- ScreenManager.Game.ResetElapsedTime();
- }
- public override void UnloadContent()
- {
- content.Unload();
- }
- /// <summary>
- /// Updates the state of the game. This method checks the GameScreen.IsActive
- /// property, so the game will stop updating when the pause menu is active,
- /// or if you tab away to a different application.
- /// </summary>
- public override void Update(GameTime gameTime, bool otherScreenHasFocus,
- bool coveredByOtherScreen)
- {
- base.Update(gameTime, otherScreenHasFocus, false);
- // Gradually fade in or out depending on whether we are covered by the pause screen.
- if (coveredByOtherScreen)
- pauseAlpha = Math.Min(pauseAlpha + 1f / 32, 1);
- else
- pauseAlpha = Math.Max(pauseAlpha - 1f / 32, 0);
- if (IsActive)
- {
- // Apply some random jitter to make the enemy move around.
- const float randomization = 10;
- enemyPosition.X += (float)(random.NextDouble() - 0.5) * randomization;
- enemyPosition.Y += (float)(random.NextDouble() - 0.5) * randomization;
- // Apply a stabilizing force to stop the enemy moving off the screen.
- Vector2 targetPosition = new Vector2(
- ScreenManager.GraphicsDevice.Viewport.Width / 2 - gameFont.MeasureString("XNA Basic Starter Kit!").X / 2,
- 200);
- enemyPosition = Vector2.Lerp(enemyPosition, targetPosition, 0.05f);
- // mySprite.Update(gameTime);
- myBall.UpdatePosition();
- // rightBat.Update();
- myInputClass.Update();
- }
- }
- /// <summary>
- /// Lets the game respond to player input. Unlike the Update method,
- /// this will only be called when the gameplay screen is active.
- /// </summary>
- public override void HandleInput(InputState input) //, GameTime gameTime)
- {
- if (input == null)
- throw new ArgumentNullException("input");
- // Look up inputs for the active player profile.
- int playerIndex = (int)ControllingPlayer.Value;
- KeyboardState keyboardState = input.CurrentKeyboardStates[playerIndex];
- GamePadState gamePadState = input.CurrentGamePadStates[playerIndex];
- // The game pauses either if the user presses the pause button, or if
- // they unplug the active gamepad. This requires us to keep track of
- // whether a gamepad was ever plugged in, because we don't want to pause
- // on PC if they are playing with a keyboard and have no gamepad at all!
- bool gamePadDisconnected = !gamePadState.IsConnected &&
- input.GamePadWasConnected[playerIndex];
- if (input.IsPauseGame(ControllingPlayer) || gamePadDisconnected)
- {
- ScreenManager.AddScreen(new PauseMenuScreen(), ControllingPlayer);
- }
- if (input.IsPauseGame(ControllingPlayer) || gamePadDisconnected)
- {
- ScreenManager.AddScreen(new PauseMenuScreen(), ControllingPlayer);
- }
- else
- {
- //If/ElseIf is used so we don't move up AND down (by holding both buttons). It's either up OR down, not both
- if (myInputClass.LeftUp)
- {
- leftBat.Position.Y--; //Decrease the Y position by 1 every frame. (Move towards top of screen)
- }
- else if (myInputClass.LeftDown)
- {
- leftBat.Position.Y++; //Increase the Y position by 1 every frame. (Move towards bottom of screen)
- }
- //If/ElseIf is used so we don't move up AND down (by holding both buttons). It's either up OR down, not both
- if (myInputClass.RightUp)
- {
- rightBat.Position.Y--; //Decrease the Y position by 1 every frame. (Move towards top of screen)
- }
- else if (myInputClass.RightDown)
- {
- rightBat.Position.Y++; //Increase the Y position by 1 every frame. (Move towards bottom of screen)
- }
- }
- public override void Draw(GameTime gameTime)
- {
- // Our player and enemy are both actually just text strings.
- SpriteBatch spriteBatch = ScreenManager.SpriteBatch;
- spriteBatch.Begin();
- spriteBatch.Draw(backgroundTexture, new Rectangle(0, 0, 800, 600), Color.White);
- // draw hud
- hudContainer.Draw(spriteBatch);
- spriteBatch.DrawString(gameFont, "XNA Basic Starter Kit!",
- enemyPosition, Color.Black);
- #if DEBUG // I've temporarily commented out the safeArea debug -DV
- // safeArea.Draw(spriteBatch);
- #endif
- // debug info
- var safeAreaInfo = "dx=" + safeArea.dx + ",dy=" + safeArea.dy
- + ",w=" + safeArea.width + ",h=" + safeArea.height;
- //+ ", H = " + playerHorizDirection
- //+ ", V = " + playerVertDirection;
- spriteBatch.DrawString(gameFont, safeAreaInfo, safeTopLeft, Color.Green);
- //
- // mySprite.Draw(spriteBatch);
- //
- myBall.Draw(spriteBatch);
- rightBat.Draw(spriteBatch);
- leftBat.Draw(spriteBatch);
- spriteBatch.End();
- // If the game is transitioning on or off, fade it out to black.
- if (TransitionPosition > 0 || pauseAlpha > 0)
- {
- float alpha = MathHelper.Lerp(1f - TransitionAlpha, 1f, pauseAlpha / 2);
- ScreenManager.FadeBackBufferToBlack(alpha);
- }
- }
- #endregion
- }
- }
- --------------------------------------------------------------------------------------
- namespace MyXnaGame
- {
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Xna.Framework;
- using Microsoft.Xna.Framework.Content;
- using Microsoft.Xna.Framework.Graphics;
- class Bat
- {
- private Vector2 position;
- private int moveSpeed;
- private Rectangle size;
- private int points;
- private int yHeight;
- private Texture2D texture;
- public Bat(ContentManager content, Vector2 screenSize, bool side)
- {
- moveSpeed = 6;
- points = 0;
- texture = content.Load<Texture2D>(@"gfx/bat");
- size = new Rectangle(0, 0, texture.Width, texture.Height);
- if (side) position = new Vector2(30, screenSize.Y / 2 - size.Height / 2);
- else position = new Vector2(screenSize.X - 30 - size.Width, screenSize.Y / 2 - size.Height / 2);
- yHeight = (int)screenSize.Y;
- }
- public void IncrementPoints()
- {
- points++;
- }
- public int GetPoints()
- {
- return points;
- }
- public Rectangle GetSize()
- {
- return size;
- }
- public Vector2 GetPosition()
- {
- return position;
- }
- public virtual void UpdatePosition(Ball ball)
- {
- size.X = (int)position.X;
- size.Y = (int)position.Y;
- }
- private void SetPosition(Vector2 position)
- {
- if (position.Y < 0)
- {
- position.Y = 0;
- }
- if (position.Y > yHeight - size.Height)
- {
- position.Y = yHeight - size.Height;
- }
- this.position = position;
- }
- public void MoveUp()
- {
- SetPosition(position + new Vector2(0, -moveSpeed));
- }
- public void MoveDown()
- {
- SetPosition(position + new Vector2(0, moveSpeed));
- }
- public void Draw(SpriteBatch batch)
- {
- batch.Draw(texture, position, Color.White);
- }
- }
- }
- -------------------------------------------------------------------------------
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Microsoft.Xna.Framework.Input;
- namespace MyXnaGame
- {
- class Input
- {
- private KeyboardState keyboardState;
- private KeyboardState lastState;
- public Input()
- {
- keyboardState = Keyboard.GetState();
- lastState = keyboardState;
- }
- public void Update()
- {
- lastState = keyboardState;
- keyboardState = Keyboard.GetState();
- }
- public bool RightUp
- {
- get
- {
- return keyboardState.IsKeyDown(Keys.Up);
- }
- }
- public bool RightDown
- {
- get
- {
- return keyboardState.IsKeyDown(Keys.Down);
- }
- }
- public bool LeftUp
- {
- get
- {
- return keyboardState.IsKeyDown(Keys.W);
- }
- }
- public bool LeftDown
- {
- get
- {
- return keyboardState.IsKeyDown(Keys.S);
- }
- }
- }
- }
RAW Paste Data