我正嘗試在每個像素碰撞中與我的XNA遊戲中的spritesheets進行整合。我主要是基於this,但它不適合我。Texture2D.GetData「索引超出範圍」
以下是我在從spritesheet左上角的sprite獲取數據的過程。它似乎工作正常 - 至少沒有錯誤。
Rectangle SpriteSource = new Rectangle(0, 0, 32, 32);
ColorData = new Color[SpriteSource.Width * SpriteSource.Height];
Owner.Spritesheet.GetData(0, SpriteSource, ColorData, SpriteSource.X * SpriteSource.Y,
SpriteSource.Width * SpriteSource.Height);
我們得到一個精靈,這不是在左上角:
Rectangle SpriteSource = new Rectangle(48, 32, 16, 32);
ColorData = new Color[SpriteSource.Width * SpriteSource.Height];
Owner.Spritesheet.GetData(0, SpriteSource, ColorData, SpriteSource.X * SpriteSource.Y,
SpriteSource.Width * SpriteSource.Height);
完全相同的代碼,除了由(48,32)抵消的矩形。但由於某些原因,它會拋出異常「此參數必須是數組中的有效索引。」 參數名稱:dataIndex「
我在做什麼錯?在這種情況下,dataIndex指的是什麼 - ColorData數組或實際的Texture2D?另外,如果我沒有做任何特殊的「mipmapping」 - 不完全確定那是什麼,但我有一個粗略的想法 - 我將使用0作爲mipmapping級別,對吧?
編輯:一些更多的信息(SS = SpriteSource,O.Tex = Owner.Spritesheet):
只要SS.X <= O.Tex.Width - SS.Width
和SS.Y == 0
,代碼編譯/運行正常。 如果SS.X > O.Tex - SS.Width
,它會產生一個完全預期的「矩形對於此資源來說太大或太小」的錯誤。 用於更改Y並將X保持爲零。
但是,如果滿足以下條件:SS.X > 0 && SS.Y > 0 && (SS.X * SS.Y) < (SS.Width * SS.Height)
,同樣令人沮喪但不同的錯誤「此參數必須是數組中的有效索引。參數名稱:elementCount」被生成。
EDIT2:似乎我對elementCount錯誤略有誤解,它可以在SS.X * SS.Y > SS.Width * SS.Height
的條件下生成。我很高興至少這樣一個愚蠢的條件不是問題的一部分。
一個像素碰撞提示,檢查第一個箱體碰撞,然後像素碰撞。但最終我會刪除像素collsion,因爲當你有很多對象時它確實滯後。現在我只用盒子和圓圈碰撞。 – 2013-05-11 09:23:12