0
我在XNA中使用動畫片動畫,我想使用像素完美的碰撞。我的問題是像素完美碰撞檢查spritesheet上的當前像素是否透明,而不是檢查我使用的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。
編輯: 我設法弄清楚,我用這個代替
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擊。
我正在讀取spritesheet的錯誤部分,但我修復了它,現在即時播放雖然我從這行代碼崩潰:player.texture.GetData(0,src,personTextureData,0,87 * 100); 說 Microsoft.Xna.Framework.Graphics.dll中發生未處理的「System.ArgumentException」類型的異常 附加信息:此資源的矩形太大或太小。 –
2012-04-23 12:54:58
我修正了這個錯誤,我使用的是frameSize * currentFrame,因此它的大小並不比texture.Width大,問題是如果frameSize * currentFrame是500,並且圖片的寬度是512,那麼會嘗試從500中讀取並且然後添加100的寬度,所以它太多了600。 – 2012-04-23 13:33:32