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.
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
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!
Re: How to draw sprite and make it move with keyboard keys
Quote:
Originally Posted by
nube
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.
Re: How to draw sprite and make it move with keyboard keys
Please use CODE tags when posting code, it makes it readable.
Re: How to draw sprite and make it move with keyboard keys
Quote:
Originally Posted by
sharonswaroop
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?
Re: How to draw sprite and make it move with keyboard keys
Quote:
Originally Posted by
sharonswaroop
How can i flip the image when it reaches the left and right boundary wall?
Quote:
I have wrote one code to move and flip the image.
Quote:
The code is as below
Quote:
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
Quote:
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
Quote:
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
Re: How to draw sprite and make it move with keyboard keys
Quote:
Originally Posted by
nube
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
Quote:
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