Hi,
My skills at XNA are just above beginner, however no matter what i try i cant get my animated sprite to move forward.
If any of you guys could help me I would really appreciate it.
I've tried a few tutorials with no luck, I feel like I'm missing something
So here's my code for the animation class(Sorry i created it with experimentation in mind and haven't cleaned it up yet)
The image is loaded in the Game1.cs class and i will post it if reqeusted but i don't think it will be relevant for now.
Thank you for reading
Mark.
My skills at XNA are just above beginner, however no matter what i try i cant get my animated sprite to move forward.
If any of you guys could help me I would really appreciate it.
I've tried a few tutorials with no luck, I feel like I'm missing something
So here's my code for the animation class(Sorry i created it with experimentation in mind and haven't cleaned it up yet)
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 Extreme_Fighter_Pilot
{
public class AnimatedPlayerLeft
{
public Texture2D TextureLeft { get; set; }
Rectangle spriteRectangle; //Dont know why i need this, it was just in the tutorial.
public int Rows { get; set; }
public int Columns { get; set; }
private int currentFrame;
private int totalFrames;
//Sprite Movement, Everything here was from the last tutorial i was looking at.
public Rectangle boundingBox;
public bool isColliding;
Vector2 spriteOrigin;
Vector2 spritePosition;
float rotation;
Vector2 spriteVelocity;
const float tangentialVelocity = 5f;
float friction = 0.1f;
public AnimatedPlayerLeft(Texture2D textureLeft, int rows, int columns)
{
TextureLeft = textureLeft;
Rows = rows;
Columns = columns;
currentFrame = 0;
totalFrames = Rows * Columns;
isColliding = false;
spritePosition = new Vector2(300, 300); //I messed around with this a lot
}
public void Update()
{
//The mess i left over from when i gave up on this approach.
spriteRectangle = new Rectangle((int)spritePosition.X, (int)spritePosition.Y,
TextureLeft.Width, TextureLeft.Height);
spritePosition = spriteVelocity + spritePosition;
spriteOrigin = new Vector2(spriteRectangle.Width / 2, spriteRectangle.Height / 2);
//This is where i have been doing most of my experimenting
if (Keyboard.GetState().IsKeyDown(Keys.W))
{
spritePosition.X += tangentialVelocity;
}
else if (spriteVelocity != Vector2.Zero)
{
Vector2 i = spriteVelocity;
spriteVelocity = i -= friction * i;
}
if (Keyboard.GetState().IsKeyDown(Keys.A)) //This is for the turning left animation.
{
rotation -= 0.1f; //I need help with this as well, it doesnt work.
if (currentFrame < 19) //19 is the last frame of the animation, if the player holds down the button the animation will hold this frame
{
currentFrame++;
}
}
if (Keyboard.GetState().IsKeyUp(Keys.A)) //This is for a smooth transition back to frame 0.
{
if (currentFrame > 0) //To stop it from going into the minus.
{
if (currentFrame < 20) //To stop it from interfering with the turning right animation.
{
currentFrame--;
}
}
}
if (Keyboard.GetState().IsKeyDown(Keys.D)) //This is the turning right animation.
{
rotation += 0.1f; //Doesnt work either.
if (currentFrame == 0) //To set the current frame to the first frame of the animation, i chose for it to only change once its at 0 so that the turning left animation must be finished
{
currentFrame = 21;
}
if (currentFrame < 39) //To hold it at the last frame of the animation.
{
if (currentFrame > 20) //To stop it from using the wrong animation
{
currentFrame++;
}
}
}
if (Keyboard.GetState().IsKeyUp(Keys.D))
{
if (currentFrame > 20)
{
currentFrame--;
}
}
if (currentFrame == 20)
{
currentFrame = 0;
}
}
public void Draw(SpriteBatch spriteBatch, Vector2 location) //I havent messed with anything here, its straight from the tutorial
{
int width = TextureLeft.Width / Columns;
int height = TextureLeft.Height / Rows;
int row = (int)((float)currentFrame / (float)Columns);
int column = currentFrame % Columns;
Rectangle sourceRectangle = new Rectangle(width * column, height * row, width, height);
Rectangle destinationRectangle = new Rectangle((int)location.X, (int)location.Y, width, height);
spriteBatch.Draw(TextureLeft, destinationRectangle, sourceRectangle, Color.White);
}
}
}
The image is loaded in the Game1.cs class and i will post it if reqeusted but i don't think it will be relevant for now.
Thank you for reading
Mark.