XNA 게임에서 픽셀 당 충돌을 스프라이트 시트와 통합하려고합니다. 나는 대부분 this에서 벗어나고 있지만, 저에게는 효과가 없습니다.Texture2D.GetData "인덱스가 범위를 벗어났습니다."
내 스프라이트 시트의 왼쪽 위 모서리에있는 스프라이트에서 데이터를 가져 오기 위해 수행중인 작업은 다음과 같습니다. 그것은 잘 작동하는 것 같습니다 - 적어도 오류는 없습니다. (48, 32)에 의해 사각형을 상쇄을 제외하고,
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);
정확한 동일한 코드 :
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);
지금 왼쪽 상단에없는 스프라이트를 얻을 수 있습니다. 그래도 어떤 이유로 "이 매개 변수는 배열 내의 유효한 인덱스 여야합니다."매개 변수 이름 : dataIndex
무엇이 잘못 되었나요? 이 인스턴스에서 DataIndex는 무엇을 말하는가? ColorData 배열 또는 실제 Texture2D? 또한 특별한 mipmapping을하지 않은 경우 - 그것이 무엇인지는 모르지만 대략적인 아이디어가 있습니다 - 나는 밉 매핑 레벨로 0을 사용하겠습니까?
편집 : 좀 더 정보 (SS = SpriteSource, O.Tex = Owner.Spritesheet) :
만큼SS.X <= O.Tex.Width - SS.Width
및
SS.Y == 0
로, 코드/잘 실행 컴파일합니다.
SS.X > O.Tex - SS.Width
인 경우 완전히 예상되는 "이 사각형의 너비가 너무 크거나 작음"오류가 발생합니다. Y를 변경하고 X를 0으로 유지하는 것과 동일합니다.
그러나 다음 조건이 모두 참인 경우 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
조건에서 생성 될 수 있습니다. 나는 그런 바보 같은 상태가 적어도 문제의 일부가 아니기 때문에 기쁘다.
픽셀 충돌을위한 팁 하나가 첫 번째 상자 충돌과 픽셀 충돌을 확인합니다. 하지만 마지막으로 나는 픽셀 융합을 제거합니다. 왜냐하면 많은 오브젝트가있을 때 실제로 뒤떨어져 있기 때문입니다. 이제는 상자와 서클 충돌 만 사용합니다. –