Jump to content

  • Log In with Google      Sign In   
  • Create Account

passing a rectangle array through draw method


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 burnt_casadilla   Members   -  Reputation: 443

Like
0Likes
Like

Posted 07 April 2013 - 01:44 PM

illl start with the code i guess.

 

heres my alien class

public class Alien
    {
        public Texture2D Texture { get; set; }
        public int Rows { get; set; }
        public int Columns { get; set; }
        private int currentFrame;
        private int totalFrames;

        public Alien(Texture2D texture, int rows, int columns)
        {
            Texture = texture;
            Rows = rows;
            Columns = columns;
            currentFrame = 0;
            totalFrames = Rows * Columns;
        }

        public void Update()
        {
            currentFrame++;
            if (currentFrame == totalFrames)
                currentFrame = 0;
        }

        public void Draw(SpriteBatch spriteBatch, Vector2 location)
        {
            int width = Texture.Width / Columns;
            int height = Texture.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.Begin();
            spriteBatch.Draw(Texture, destinationRectangle, sourceRectangle, Color.White);
            spriteBatch.End();
        }
    }
}

 

and heres my main game class

 

    public class Game1 : Microsoft.Xna.Framework.Game
    {
        SpriteFont font;
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Vector2 alienPos = new Vector2(50, 20);
        Vector2 shipPos;
        Texture2D alienSprite;
        Texture2D shipSprite;
        
        private Alien alien;
        private Ship ship;

        public int aliensLeft;

        public int alienCount = 6;

        public Alien[] alienGroup = new Alien[6];
        public Rectangle[] alienRec = new Rectangle[6];

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

            this.graphics.PreferredBackBufferHeight = 500;
            this.graphics.PreferredBackBufferWidth = 400;
        }

        protected override void Initialize()
        {
            this.IsMouseVisible = true;
            base.Initialize();

            for (int x = 0; x < alienCount; x++)
            {
                alienRec[x] = new Rectangle(x*20, 0, 20, 30);
            }
        }

        protected override void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: use this.Content to load your game content here
            alienSprite = Content.Load<Texture2D>("aliensprite");
            alien = new Alien(alienSprite, 1, 2);

            shipSprite = Content.Load<Texture2D>("ship");
            ship = new Ship(shipSprite);

            font = Content.Load<SpriteFont>("SpriteFont1");
        }

        protected override void UnloadContent()
        {
            // TODO: Unload any non ContentManager content here
        }

        protected override void Update(GameTime gameTime)
        {
            aliensLeft = alienGroup.Length;
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: Add your update logic here
            alien.Update();
            ship.Update();

            base.Update(gameTime);
        }

        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.Black);

            /*for (int x = 0; x < alienCount; x++)
            {
                alien.Draw(spriteBatch, alienPos, alienRec[x]);
            }*/

            ship.Draw(spriteBatch, shipPos);
            alien.Draw(spriteBatch, alienPos);

            spriteBatch.Begin();
            spriteBatch.DrawString(font, "Aliens remaining:  " + aliensLeft, new Vector2(10, 480), Color.White);
            spriteBatch.End();

            base.Draw(gameTime);
        }
    }

 

Basically what I'm trying to do is create an array of rectangles that outlines each alien, and then in the Draw method of my main class I'm trying to draw the animated alien sprite at the position of each rectangle. Now I think I know whats wrong...the alien object wont draw at the position of the rectangle because its not one of the types of the alien object. What Im wondering is if theres an easier way to do this instead? And how could I make my sprite animation code more efficient and still keep it within the class?

 

The part that is within comments of the draw class in my main method is the part Im confused with


Edited by burnt_casadilla, 07 April 2013 - 01:45 PM.

If you see a post from me, you can safely assume its C# and XNA :)


Sponsor:



Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS