2012-04-17 64 views
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擊。

回答

0

如果你可以詳細說明你的意思,當你說它只有一次會有幫助。

我不得不調整相同的IntersectsPixels函數來處理我的項目。有一件事我發現有用的是使用非常緩慢的正方形(比如說100x100)動畫,用純紅色填充,然後完全透明,只有其他的框架。

它在調試與碰撞和動畫精靈的像素比較相關的問題方面有很多幫助。

看看您是否可以提供更多關於什麼不工作以及如何分解的信息。祝你好運,解決您的問題。

+0

我正在讀取spritesheet的錯誤部分,但我修復了它,現在即時播放雖然我從這行代碼崩潰:player.texture.GetData (0,src,personTextureData,0,87 * 100); 說 Microsoft.Xna.Framework.Graphics.dll中發生未處理的「System.ArgumentException」類型的異常 附加信息:此資源的矩形太大或太小。 – 2012-04-23 12:54:58

+0

我修正了這個錯誤,我使用的是frameSize * currentFrame,因此它的大小並不比texture.Width大,問題是如果frameSize * currentFrame是500,並且圖片的寬度是512,那麼會嘗試從500中讀取並且然後添加100的寬度,所以它太多了600。 – 2012-04-23 13:33:32