Как вижу XNA. Видел на msdn про это ссылка Посмотри здесь. Глава - спрайты/анимация, там описан способ получения определённого кадра анимации. У тебя платформер? попиксельная колизия тут наверное лишней будет, бокса должно хватить. можно так, должно работать
Code
Point currentFrame = нужный кадр анимации. Point frameSize = размер кадра анимации Rectangle rec = new Rectangle(currentFrame.X * frameSize.X, currentFrame.Y * frameSize.Y, frameSize.X, frameSize.Y)
У перса анимация смерти забавная. Тоже вчера этот пример платформера скачал) Загляни, много полезного ТЫК
Вcем зла.
Сообщение отредактировал Undead - Четверг, 18 Октября 2012, 21:55
Я нашел решение)) Разделяем наш спрайт-шит на отдельные спрайты:
Code
public Texture2D[] Split(Texture2D original, int partWidth, int partHeight, out int xCount, out int yCount) { yCount = original.Height / partHeight;//The number of textures in each horizontal row xCount = original.Width / partWidth;//The number of textures in each vertical column Texture2D[] r = new Texture2D[xCount * yCount];//Number of parts = (area of original) / (area of each part). int dataPerPart = partWidth * partHeight;//Number of pixels in each of the split parts
//Get the pixel data from the original texture: Color[] originalData = new Color[original.Width * original.Height]; original.GetData<Color>(originalData);
int index = 0; for (int y = 0; y < yCount * partHeight; y += partHeight) for (int x = 0; x < xCount * partWidth; x += partWidth) { //The texture at coordinate {x, y} from the top-left of the original texture Texture2D part = new Texture2D(original.GraphicsDevice, partWidth, partHeight); //The data for part Color[] partData = new Color[dataPerPart];
//Fill the part data with colors from the original texture for (int py = 0; py < partHeight; py++) for (int px = 0; px < partWidth; px++) { int partIndex = px + py * partWidth; //If a part goes outside of the source texture, then fill the overlapping part with Color.Transparent if (y + py >= original.Height || x + px >= original.Width) partData[partIndex] = Color.Transparent; else partData[partIndex] = originalData[(x + px) + (y + py) * original.Width]; }
//Fill the part with the extracted data part.SetData<Color>(partData); //Stick the part in the return array: r[index++] = part; } //Return the array of parts. return r; }
Использование:
Code
Texture2D spriteSheet=Content.Load<Texture2D>("Run"); int xCount,yCount; Texture2d[] parts = Split(spriteSheet, 10, 10, out xCount, out yCount); /// ///... /// parts[frame].GetData(runnerData);
Англоязычные друзья подкинули ссылку по per pixel collision, ВОТ может пригодится. Сам сайтик довольно интересный, по xna немало полезного ссылка. Вcем зла.
Сообщение отредактировал Undead - Суббота, 20 Октября 2012, 10:57