Я использую анимацию spritesheet в XNA, и я хочу использовать идеальное столкновение пикселей. Моя проблема в том, что идеальные коллизии пикселов проверяют, прозрачен ли текущий пиксель на спрайте, вместо того, чтобы проверять часть спрайта, который я использую. Это мой код:Pixel идеальное столкновение на анимации spritesheet, XNA
blockTextureData = new Color[shot.texture.Width * shot.texture.Height];
shot.texture.GetData(blockTextureData);
personTextureData = new Color[player2.texture.Width * player2.texture.Height];
player2.texture.GetData(personTextureData);
if (IntersectPixels(player2.CollissionBox, personTextureData, shot.CollissionBox, blockTextureData))
Я хотел бы знать, как выбрать определенную часть spritesheet и проверить столкновение против него. Я использовал this MSDN guide.
EDIT: мне удалось понять это, я использовал вместо
src = new Rectangle(frame, 0, 87, 100);
player.texture.GetData<Color>(0, src, personTextureData,0, 87*100);
и кадр, вы были запустить его, например 0
для первого и 87
для второго, так как я использую spritesheet с 2 фотографии 2*87
в ширину и 100
в высоту.
Редактировать 2: Проблема теперь в том, что как только вы нажмете pixelperfect, вы перестанете работать, поэтому она работает только на 1 удар.
Я читал из-за неправильной части спрайта, но я исправил его, теперь, когда я играю, хотя я получаю крах из этой строки кода: player.texture.GetData (0, src, personTextureData, 0, 87 * 100); , говорящий, что Необработанное исключение типа «System.ArgumentException» произошло в Microsoft.Xna.Framework.Graphics.dll Дополнительная информация: прямоугольник слишком велик или слишком мал для этого ресурса. –
Я тоже исправил эту ошибку, я использовал frameSize * currentFrame и проверял, чтобы он был не больше, чем texture.Width, проблема заключалась в том, что если frameSize * currentFrame было 500, а изображение было 512 в ширину, попыталось бы прочитать от 500 и затем добавьте 100 в ширину, чтобы получить слишком 600, что больше. –