2012-04-17 3 views
0

Я использую анимацию 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 удар.

ответ

0

Если вы могли бы уточнить, что вы имеете в виду, когда говорите, что это работает только один раз, это поможет.

Мне пришлось настроить те же самые функции IntersectsPixels для работы с моим проектом. Одна вещь, которую я нашел полезной, заключалась в использовании очень медленной анимации квадрата (скажем, 100х100), заполненной чистым красным, а затем полностью прозрачным в этом только другом кадре.

Это очень помогло в устранении проблем, связанных с сравнением пикселей при столкновении и анимированных спрайтах.

Посмотрите, сможете ли вы предоставить более подробную информацию о том, что не работает и как оно разрушается. Удачи вам в решении ваших проблем.

+0

Я читал из-за неправильной части спрайта, но я исправил его, теперь, когда я играю, хотя я получаю крах из этой строки кода: player.texture.GetData (0, src, personTextureData, 0, 87 * 100); , говорящий, что Необработанное исключение типа «System.ArgumentException» произошло в Microsoft.Xna.Framework.Graphics.dll Дополнительная информация: прямоугольник слишком велик или слишком мал для этого ресурса. –

+0

Я тоже исправил эту ошибку, я использовал frameSize * currentFrame и проверял, чтобы он был не больше, чем texture.Width, проблема заключалась в том, что если frameSize * currentFrame было 500, а изображение было 512 в ширину, попыталось бы прочитать от 500 и затем добавьте 100 в ширину, чтобы получить слишком 600, что больше. –