How to draw sprite and make it move with keyboard keys
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 8 of 8

Thread: How to draw sprite and make it move with keyboard keys

  1. #1
    Join Date
    Jan 2014
    Posts
    5

    How to draw sprite and make it move with keyboard keys

    Hi,
    I am new to Game development .I have to use XNA with Visual studio 2010 for this game development and i am using c# for the programming.
    I have drawn a sprite and it is moving without any human control with keybord keys. It is just moving and if it hits any boundary then it will bounce. The sprite is not flipping also.

    I need to Draw the sprite(a helicopter image) on the screen and make it move around on its own. If the sprite is about to leave the screen, it should “bounce” off the edges and head in the opposite direction. Also,
    make sure the helicopter faces the direction it is traveling. Then after that i have to use the arrow keys on the keyboard to control the movement.

  2. #2
    Arjay's Avatar
    Arjay is offline Moderator / MS MVP Power Poster
    Join Date
    Aug 2004
    Posts
    10,956

    Re: How to draw sprite and make it move with keyboard keys

    The place to start is by doing some simple programs in Xna. Download the Xna SDK and look over the examples and tutorials.

    http://www.bing.com/search?q=Microso...are&FORM=QSRE4

  3. #3
    Join Date
    Jan 2014
    Posts
    3

    Re: How to draw sprite and make it move with keyboard keys

    It's so clear!
    you just change the coordinates using a keyboard interrupt and timer. and by clearing the form on each action. sort of refreshing!

  4. #4
    Join Date
    Jan 2014
    Posts
    5

    Re: How to draw sprite and make it move with keyboard keys

    Quote Originally Posted by nube View Post
    It's so clear!
    you just change the coordinates using a keyboard interrupt and timer. and by clearing the form on each action. sort of refreshing!
    I have the code as below:
    Code:
    namespace helimoveGame1
    {
        /// <summary>
        /// This is the main type for your game
        /// </summary>
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
    
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
            }
            
            /// <summary>
            /// Allows the game to perform any initialization it needs to before starting to run.
            /// This is where it can query for any required services and load any non-graphic
            /// related content.  Calling base.Initialize will enumerate through any components
            /// and initialize them as well.
            /// </summary>
            protected override void Initialize()
            {
                // TODO: Add your initialization logic here
    
                base.Initialize();
            }
    
            /// <summary>
            /// LoadContent will be called once per game and is the place to load
            /// all of your content.
            /// </summary>
            Texture2D helicopter;
            Vector2 spritePosition = Vector2.Zero;
            Vector2 spriteSpeed = new Vector2(50.0f, 50.0f);
           
           protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
                helicopter = Content.Load<Texture2D>("helicopter");
                // TODO: use this.Content to load your game content here
               
            }
    
            /// <summary>
            /// UnloadContent will be called once per game and is the place to unload
            /// all content.
            /// </summary>
            protected override void UnloadContent()
            {
                // TODO: Unload any non ContentManager content here
            }
    
            /// <summary>
            /// Allows the game to run logic such as updating the world,
            /// checking for collisions, gathering input, and playing audio.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                    this.Exit();
    
                // TODO: Add your update logic here
                spritePosition += spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
    
                int MaxX = graphics.GraphicsDevice.Viewport.Width - helicopter.Width;
                int MinX = 0;
                int MaxY = graphics.GraphicsDevice.Viewport.Height - helicopter.Height;
                int MinY = 0;
                if (spritePosition.X > MaxX)
                {
                    spriteSpeed.X *= -1;
                    spritePosition.X = MaxX;
                }
    
                else if (spritePosition.X < MinX)
                {
                    spriteSpeed.X *= -1;
                    spritePosition.X = MinX;
                }
                if (spritePosition.Y > MaxY)
                {
                    spriteSpeed.Y *= -1;
                    spritePosition.Y = MaxY;
                }
                else if (spritePosition.Y < MinY)
                {
                    spriteSpeed.Y *= -1;
                    spritePosition.Y = MinY;
                }
                
                base.Update(gameTime);
            }
    
            /// <summary>
            /// This is called when the game should draw itself.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // TODO: Add your drawing code here
                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.Additive);
                spriteBatch.Draw(helicopter, spritePosition, null, Color.White);
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        }
    }
    Which cordinates here i need to change .I tried many and getting horrible errors. I dont have any idea about thos errors.
    Last edited by HanneSThEGreaT; January 22nd, 2014 at 10:02 AM. Reason: Added code tags!

  5. #5
    Join Date
    Jul 2001
    Location
    Sunny South Africa
    Posts
    11,074

    Re: How to draw sprite and make it move with keyboard keys

    Please use CODE tags when posting code, it makes it readable.

  6. #6
    Join Date
    Jan 2014
    Posts
    5

    Re: How to draw sprite and make it move with keyboard keys

    Quote Originally Posted by sharonswaroop View Post
    I have the code as below:
    Code:
    namespace helimoveGame1
    {
        /// <summary>
        /// This is the main type for your game
        /// </summary>
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
    
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
            }
            
            /// <summary>
            /// Allows the game to perform any initialization it needs to before starting to run.
            /// This is where it can query for any required services and load any non-graphic
            /// related content.  Calling base.Initialize will enumerate through any components
            /// and initialize them as well.
            /// </summary>
            protected override void Initialize()
            {
                // TODO: Add your initialization logic here
    
                base.Initialize();
            }
    
            /// <summary>
            /// LoadContent will be called once per game and is the place to load
            /// all of your content.
            /// </summary>
            Texture2D helicopter;
            Vector2 spritePosition = Vector2.Zero;
            Vector2 spriteSpeed = new Vector2(50.0f, 50.0f);
           
           protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);
                helicopter = Content.Load<Texture2D>("helicopter");
                // TODO: use this.Content to load your game content here
               
            }
    
            /// <summary>
            /// UnloadContent will be called once per game and is the place to unload
            /// all content.
            /// </summary>
            protected override void UnloadContent()
            {
                // TODO: Unload any non ContentManager content here
            }
    
            /// <summary>
            /// Allows the game to run logic such as updating the world,
            /// checking for collisions, gathering input, and playing audio.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            protected override void Update(GameTime gameTime)
            {
                // Allows the game to exit
                if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                    this.Exit();
    
                // TODO: Add your update logic here
                spritePosition += spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;
    
                int MaxX = graphics.GraphicsDevice.Viewport.Width - helicopter.Width;
                int MinX = 0;
                int MaxY = graphics.GraphicsDevice.Viewport.Height - helicopter.Height;
                int MinY = 0;
                if (spritePosition.X > MaxX)
                {
                    spriteSpeed.X *= -1;
                    spritePosition.X = MaxX;
                }
    
                else if (spritePosition.X < MinX)
                {
                    spriteSpeed.X *= -1;
                    spritePosition.X = MinX;
                }
                if (spritePosition.Y > MaxY)
                {
                    spriteSpeed.Y *= -1;
                    spritePosition.Y = MaxY;
                }
                else if (spritePosition.Y < MinY)
                {
                    spriteSpeed.Y *= -1;
                    spritePosition.Y = MinY;
                }
                
                base.Update(gameTime);
            }
    
            /// <summary>
            /// This is called when the game should draw itself.
            /// </summary>
            /// <param name="gameTime">Provides a snapshot of timing values.</param>
            protected override void Draw(GameTime gameTime)
            {
                graphics.GraphicsDevice.Clear(Color.CornflowerBlue);
    
                // TODO: Add your drawing code here
                spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.Additive);
                spriteBatch.Draw(helicopter, spritePosition, null, Color.White);
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        }
    }
    Which cordinates here i need to change .I tried many and getting horrible errors. I dont have any idea about thos errors.
    How can i flip the image when it reaches the left and right boundary wall?

  7. #7
    Join Date
    Jan 2014
    Posts
    5

    Re: How to draw sprite and make it move with keyboard keys

    Quote Originally Posted by sharonswaroop View Post
    How can i flip the image when it reaches the left and right boundary wall?
    I have wrote one code to move and flip the image.
    The code is as below
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;

    namespace Exercise1
    {
    class GameObject
    {
    private const float MAX_SPEED = 8.0f;
    private Vector2 position;
    private Vector2 velocity;
    private Texture2D texture;
    private Vector2 scaleSize;
    private float rotation;

    public GameObject(Texture2D setTexture)
    {
    texture = setTexture;
    velocity = new Vector2(0, 0);
    position = new Vector2(0, 0);
    scaleSize = new Vector2(1.0f, 1.0f);
    }

    public void Draw(SpriteBatch spriteBatch)
    {
    spriteBatch.Draw(texture, position, null, Color.White, rotation, new Vector2(0, 0), scaleSize, velocity.X > 0 ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0);
    }

    public void AddVelocity(float x, float y)
    {
    velocity.X += x;
    velocity.Y += y;
    }

    public void SetScale(float x, float y)
    {
    scaleSize.X = x;
    scaleSize.Y = y;
    }

    public void Update(GameTime gameTime, int screenWidth, int screenHeight)
    {

    position.X = Math.Min(Math.Max(position.X, 0), screenWidth - texture.Bounds.Width * scaleSize.X);
    position.Y = Math.Min(Math.Max(position.Y, 0), screenHeight - texture.Bounds.Height * scaleSize.Y);

    //Update position
    position += velocity;
    rotation = 0.25f / MAX_SPEED * velocity.X;

    //Lose velocity
    velocity *= 0.95f;
    }

    public Vector2 GetPosition()
    {
    return position;
    }

    }
    }
    But i need it in different way .so i converted it like as below
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;

    namespace task1
    {
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    private const float MAX_SPEED = 8.0f;
    Vector2 position = new Vector2(0,0);
    Vector2 velocity = new Vector2(0, 0);
    Texture2D helicopter;
    Vector2 scaleSize = new Vector2(1.0f, 1.0f);
    private float rotation;

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

    /// <summary>
    /// Allows the game to perform any initialization it needs to before starting to run.
    /// This is where it can query for any required services and load any non-graphic
    /// related content. Calling base.Initialize will enumerate through any components
    /// and initialize them as well.
    /// </summary>
    protected override void Initialize()
    {
    // TODO: Add your initialization logic here

    base.Initialize();
    }

    /// <summary>
    /// LoadContent will be called once per game and is the place to load
    /// all of your content.
    /// </summary>
    protected override void LoadContent()
    {
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(GraphicsDevice);
    helicopter = Content.Load<Texture2D>("helicopter");
    // TODO: use this.Content to load your game content here
    }

    /// <summary>
    /// UnloadContent will be called once per game and is the place to unload
    /// all content.
    /// </summary>
    protected override void UnloadContent()
    {
    // TODO: Unload any non ContentManager content here
    }

    /// <summary>
    /// Allows the game to run logic such as updating the world,
    /// checking for collisions, gathering input, and playing audio.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Update(GameTime gameTime, int screenWidth, int screenHeight)
    {
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    this.Exit();

    // TODO: Add your update logic here
    position.X = Math.Min(Math.Max(position.X, 0), screenWidth - helicopter.Bounds.Width * scaleSize.X);
    position.Y = Math.Min(Math.Max(position.Y, 0), screenHeight - helicopter.Bounds.Height * scaleSize.Y);

    //Update position
    position += velocity;
    rotation = 0.25f / MAX_SPEED * velocity.X;

    //Lose velocity
    velocity *= 0.95f;
    base.Update(gameTime);
    }
    protected override Vector2 GetPosition()
    {
    return position;
    }
    protected override void AddVelocity(float x, float y)
    {
    velocity.X += x;
    velocity.Y += y;
    }

    protected override void SetScale(float x, float y)
    {
    scaleSize.X = x;
    scaleSize.Y = y;
    }
    /// <summary>
    /// This is called when the game should draw itself.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Draw(GameTime gameTime)
    {
    GraphicsDevice.Clear(Color.CornflowerBlue);

    // TODO: Add your drawing code here
    spriteBatch.Draw(helicopter, position, null, Color.White, rotation, new Vector2(0, 0), scaleSize, velocity.X > 0 ? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0);
    base.Draw(gameTime);
    }

    }
    }
    Then i am getting errors as show below
    Error 3 'task1.Game1.AddVelocity(float, float)': no suitable method found to override
    Error 2 'task1.Game1.GetPosition()': no suitable method found to override
    Error 4 'task1.Game1.SetScale(float, float)': no suitable method found to override
    Error 1 'task1.Game1.Update(Microsoft.Xna.Framework.GameTime, int, int)': no suitable method found to override
    And i am not able to understand this and getting much hectic when trying to remove these errors.

    How can i solve this problem

  8. #8
    Join Date
    Jan 2014
    Posts
    5

    Re: How to draw sprite and make it move with keyboard keys

    Quote Originally Posted by nube View Post
    It's so clear!
    you just change the coordinates using a keyboard interrupt and timer. and by clearing the form on each action. sort of refreshing!
    Hi,

    i tried to move and flip the sprite by itsown with the code below
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    //public enum SpriteEffects;

    namespace helimoveGame1
    {
    /// <summary>
    /// This is the main type for your game
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

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

    /// <summary>
    /// Allows the game to perform any initialization it needs to before starting to run.
    /// This is where it can query for any required services and load any non-graphic
    /// related content. Calling base.Initialize will enumerate through any components
    /// and initialize them as well.
    /// </summary>
    protected override void Initialize()
    {
    // TODO: Add your initialization logic here

    base.Initialize();
    }

    /// <summary>
    /// LoadContent will be called once per game and is the place to load
    /// all of your content.
    /// </summary>
    Texture2D helicopter;
    Vector2 spritePosition = new Vector2(0.0f,0.0f);
    Vector2 spriteSpeed = new Vector2(50.0f, 50.0f);
    Vector2 scaleSize = new Vector2(1.0f, 1.0f);
    Vector2 velocity = new Vector2(0.0f, 0.0f);
    float rotation;

    protected override void LoadContent()
    {
    // Create a new SpriteBatch, which can be used to draw textures.
    spriteBatch = new SpriteBatch(GraphicsDevice);
    helicopter = Content.Load<Texture2D>("helicopter");
    // TODO: use this.Content to load your game content here

    }

    /// <summary>
    /// UnloadContent will be called once per game and is the place to unload
    /// all content.
    /// </summary>
    protected override void UnloadContent()
    {
    // TODO: Unload any non ContentManager content here
    }

    /// <summary>
    /// Allows the game to run logic such as updating the world,
    /// checking for collisions, gathering input, and playing audio.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Update(GameTime gameTime)
    {
    // Allows the game to exit
    if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    this.Exit();

    // TODO: Add your update logic here
    spritePosition += spriteSpeed * (float)gameTime.ElapsedGameTime.TotalSeconds;

    int MaxX = graphics.GraphicsDevice.Viewport.Width - helicopter.Width;
    int MinX = 0;
    int MaxY = graphics.GraphicsDevice.Viewport.Height - helicopter.Height;
    int MinY = 0;
    if (spritePosition.X > MaxX)
    {
    spriteSpeed.X *= -1;
    spritePosition.X = MaxX;
    //velocity.X += 1;

    }

    else if (spritePosition.X < MinX)
    {
    spriteSpeed.X *= -1;
    spritePosition.X = MinX;
    // velocity.X += 1;
    }
    if (spritePosition.Y > MaxY)
    {
    spriteSpeed.Y *= -1;
    spritePosition.Y = MaxY;
    //velocity.Y += 1;
    }
    else if (spritePosition.Y < MinY)
    {
    spriteSpeed.Y *= -1;
    spritePosition.Y = MinY;
    //velocity.Y += 1;
    }

    base.Update(gameTime);
    }

    /// <summary>
    /// This is called when the game should draw itself.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Draw(GameTime gameTime)
    {
    graphics.GraphicsDevice.Clear(Color.CornflowerBlue);

    // TODO: Add your drawing code here
    spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
    spriteBatch.Draw(helicopter, spritePosition, null, Color.White, rotation, new Vector2(0, 0), scaleSize, spritePosition.X > (graphics.GraphicsDevice.Viewport.Width - helicopter.Width)? SpriteEffects.FlipHorizontally : SpriteEffects.None, 0);
    spriteBatch.End();

    base.Draw(gameTime);
    }
    }
    }
    It is moving but not flipping when it hits the right boundary wall and left boundary wall.
    How can i flip it so that the helicopter can move in its own direction
    Hope i will get a reply soon

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center