Exemplo n.º 1
0
        private void ExtractFrames(Texture2D spriteSheet, int frameWidth, int frameHeight)
        {
            List<Texture2D> frames = new List<Texture2D>();

            int pixelCountPerFrame = frameWidth * frameHeight;
            bool foundEmptyFrame = false;

            for (int y = 0; y < spriteSheet.Height; y += frameHeight)
            {
                if (y + frameHeight <= spriteSheet.Height && !foundEmptyFrame)
                {
                    for (int x = 0; x < spriteSheet.Width; x += frameWidth)
                    {
                        if (x + frameWidth <= spriteSheet.Width && !foundEmptyFrame)
                        {
                            var frameData = new Color[pixelCountPerFrame];
                            spriteSheet.GetData(0, new Rectangle(x, y, frameWidth, frameHeight), frameData, 0, pixelCountPerFrame);

                            if (frameData.All(c => c.A == 0))
                            {
                                foundEmptyFrame = true;
                            }
                            else
                            {
                                Texture2D frame = new Texture2D(GameProvider.GameInstance.GraphicsDevice, frameWidth, frameHeight);
                                frame.SetData(frameData);
                                frames.Add(frame);
                            }
                        }
                    }
                }
            }

            _frames = frames.ToArray();
        }