Jump to content

  • Log In with Google      Sign In   
  • Create Account


mistervirtue

Member Since 26 Aug 2009
Offline Last Active Mar 16 2014 02:01 PM

Posts I've Made

In Topic: XNA - Making A Sprite Fire A Projectile

03 June 2013 - 12:24 PM

Here is my code for the most part

 

--------- SpriteManager ---------

    public class SpriteManager : Microsoft.Xna.Framework.DrawableGameComponent
    {

        SpriteBatch spriteBatch;
        UserControlledSprite player;
        Texture2D testingRec;
        Texture2D projectileSprite;
        List<Sprite> spriteList = new List<Sprite>();

        public SpriteManager(Game game)
            : base(game)
        {
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(Game.GraphicsDevice);

            player = new UserControlledSprite(Game.Content.Load<Texture2D>(@"images/SmallHero"),
                Vector2.Zero, new Point(85, 97), 1, new Point(0, 0), new Point(1, 1), new Vector2(3, 3));
            
            testingRec = Game.Content.Load<Texture2D>(@"images/testRec");

            projectileSprite = Game.Content.Load<Texture2D>(@"images/fireblast");

            base.LoadContent();

        }

        public override void Initialize()
        {
            base.Initialize();
        }

        public override void Update(GameTime gameTime)
        {
            player.Update(gameTime, Game.Window.ClientBounds);
            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime)
        {
            spriteBatch.Begin();

            player.Draw(gameTime, spriteBatch);

            spriteBatch.Draw(testingRec,player.collisionRect ,Color.White);

            spriteBatch.End();

            base.Draw(gameTime);
        }
    }

 

----- My base Sprite Class -------

namespace ProjectGaslightKnights
{
    abstract class Sprite
    {
        public Texture2D textureImage;
        protected Vector2 position;
        protected Point frameSize;
        int collisionOffset;
        public Point currentFrame;
        public Point sheetSize;
        int timeSinceLastFrame = 0;
        protected Vector2 speed;
        int milisecondsPerFrame;
        const int defaultMillisecondsPerFrame = 16;


        SpriteEffects myEffect;
        Texture2D testingRecTexture;

        public Sprite(Texture2D textureImage, Vector2 position, Point frameSize,
            int collisionOffset, Point currentFrame, Point sheetSize, Vector2 speed)
            : this(textureImage, position, frameSize, collisionOffset, currentFrame, sheetSize, speed, defaultMillisecondsPerFrame)
        {

        }

        public Sprite(Texture2D textureImage, Vector2 position, Point frameSize, int collisionOffset, Point currentFrame,
            Point sheetSize, Vector2 speed, int millisecondsPerFrame)
        {
            this.textureImage = textureImage;
            this.position = position;
            this.frameSize = frameSize;
            this.collisionOffset = collisionOffset;
            this.currentFrame = currentFrame;
            this.sheetSize = sheetSize;
            this.speed = speed;
            this.milisecondsPerFrame = milisecondsPerFrame;
        }

        public virtual void Update(GameTime gameTime, Rectangle ClientBounds)
        {
            timeSinceLastFrame += gameTime.ElapsedGameTime.Milliseconds;
            if (timeSinceLastFrame > milisecondsPerFrame)
            {
                timeSinceLastFrame = 0;
                ++currentFrame.X;
                if (currentFrame.X >= sheetSize.X)
                {
                    currentFrame.X = 0;
                    ++currentFrame.Y;
                    if (currentFrame.Y >= sheetSize.Y)
                    {
                        currentFrame.Y = 0;
                    }
                }
            }
        }

        public virtual void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(textureImage, position,
                new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y,
                    frameSize.X, frameSize.Y), Color.White, 0, Vector2.Zero, 1f, myEffect, 0);

            spriteBatch.Draw(testingRecTexture, collisionRect, Color.White);
        }


        public abstract Vector2 direction
        {
            get;
        }


        public Rectangle collisionRect
        {
            get
            {
                return new Rectangle(
                    (int)position.X + collisionOffset,
                    (int)position.Y + collisionOffset,
                    frameSize.X - (collisionOffset * 2),
                    frameSize.Y - (collisionOffset * 2));
            }
        }

        internal void Update(GameTime gameTime)
        {
            throw new NotImplementedException();
        }
    }
}

-------And my user Class -------

   class UserControlledSprite : Sprite
    {
        SpriteEffects myEffect;

        public UserControlledSprite(Texture2D textureImage, Vector2 position,
            Point frameSize, int collisionOffset, Point currentFrame, Point sheetSize,
            Vector2 speed)
            : base(textureImage, position, frameSize, collisionOffset,
            currentFrame, sheetSize, speed)
        {
        }

        public UserControlledSprite(Texture2D textureImage, Vector2 position,
             Point frameSize, int collisionOffset, Point currentFrame, Point sheetSize,
             Vector2 speed, int millisecondsPerFrame)
            : base(textureImage, position, frameSize, collisionOffset,
            currentFrame, sheetSize, speed, millisecondsPerFrame)
        {
        }

        public override Vector2 direction
        {
            get
            {
                Vector2 inputDirection = Vector2.Zero;

                if (Keyboard.GetState().IsKeyDown(Keys.Left))
                {
                    inputDirection.X -= 1;

                }
                if (Keyboard.GetState().IsKeyDown(Keys.Right))
                {
                    inputDirection.X += 1;

                }
                if (Keyboard.GetState().IsKeyDown(Keys.Down))
                {
                    inputDirection.Y += 1;

                }
                if (Keyboard.GetState().IsKeyDown(Keys.Up))
                {
                    inputDirection.Y -= 1;

                }

                return inputDirection * speed;
            }
        }


        public override void Update(GameTime gameTime, Rectangle ClientBounds)
        {
            //Move the spite according to the direction property
            position += direction;

            //If the player is facing left, flip it horizontally
            if (direction.X < 0)
            {
                this.myEffect = SpriteEffects.FlipHorizontally;
            }

            //If The player is facing right, no effect
            if (direction.X > 0)
            {
                this.myEffect = SpriteEffects.None;
            }

            //If the player leaves bounds off the screen put it back in play
            if (position.X < 0)
            {
                position.X = 0;
            }

            if (position.Y < 0)
            {
                position.Y = 0;
            }

            if (position.X > ClientBounds.Width - (frameSize.X))
            {
                position.X = ClientBounds.Width - (frameSize.X );
            }

            if (position.Y > ClientBounds.Height - (frameSize.Y))
            {
                position.Y = ClientBounds.Height - (frameSize.Y);

            }

            base.Update(gameTime, ClientBounds);
        }

       public override void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(textureImage, position,
              new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y,
        frameSize.X, frameSize.Y), Color.White, 0, Vector2.Zero, 1, myEffect, 0);

        }
    }

 

I feel like I am cheating though. This isn't a school project or anything but all my professers tell me that Programmers need to learn to solve their own problems. But I think problem solving should involve other people, see as most of us want to work with other programmers. Anyway I am trying to build it such that my UserClass will be able to fire projectiles. So i Think the way I am going to model my ProjecticleSprite with a it's own draw(), and Update() and not inherit from the base class sprite. Thanks for your help everyone.


In Topic: Suggestions on what sould i do after second game "project"

03 June 2013 - 08:28 AM

I would suggest you just keep working on your RPG in your spare time. It should grow as your tools and skills do. The more you learn how to do the more you should add into your game.


In Topic: Drawing A 2D Texture Border

30 May 2013 - 04:18 PM

I actually just solved my own problem! I feel so good. My issue was I wasn't draw the testingRec in the SpriteManager. 


In Topic: Drawing A 2D Texture Border

30 May 2013 - 04:08 PM

The code it self runs. All of my sprites appear and do the stuff they are supposed to do, but I can't borders I want to draw over them aren't being drawn.


In Topic: XNA Code Help - Drawing Collision Rectangle

10 May 2013 - 02:16 AM

Any code pointers would be nice.

I gave you one in my response above.

Sorry about that dave, I am colorblind. Seeing that different shade of blue is hard for me when i am not on my home computer. My bad.


PARTNERS