I also have a collision map, which is constructed by passing an int[,] to genreate a texture using a render target. So I end up with a collision Texture.
I am trying to detect a collion with this Collision texture and seem to be going wrong. I have followed the tutorial here App hub
public bool CanMove(Player player, Camera camera, Vector2 moveDir) { /* Todo: * Calulate the Rectangle of the Player * Move this rectangle by MoveDirection to get the Rectangle on the Collision Map we want to get * Check these two Rectangles for pixel Collisions */ // Calulate the Rectangle of the Player Matrix rotationmatrix = Matrix.CreateRotationZ(player.Rotation); Rectangle boundingPlayer = player.GetCollisonRect(); // Move this rectangle by MoveDirection to get the Rectangle on the Collision Map we want to get Rectangle collisionRect = new Rectangle( boundingPlayer.X + (int)moveDir.X, boundingPlayer.Y + (int)moveDir.Y, boundingPlayer.Width, boundingPlayer.Height); //Get the Color Data for each of these Rectangles Color[] playerData = new Color[player._tPlayerTexture.Width * player._tPlayerTexture.Height]; player.GetTextureData(playerData); Color[] CollisionData = new Color[_collisionTexture.Width * _collisionTexture.Height]; CollisionData = GetPixelData(collisionRect); //Rotate both these Rectangles //boundingPlayer = CalculateBoundingRectangle(boundingPlayer, rotationmatrix); //collisionRect = CalculateBoundingRectangle(collisionRect, rotationmatrix); // Check these two Rectangles for pixel Collisions //Check them to see if they intersect to avoid useless calcs if (boundingPlayer.Intersects(collisionRect)) if (IntersectPixels(boundingPlayer, playerData, collisionRect, CollisionData)) return false; //We say we always can move, unless we already broke out return true; }
The full Code File
This function supposed to decide if the Player can mvoe, however there are a few problem I am stuggling to get my head around.
1/ When I DONT rotate the Collision Rectangle
//boundingPlayer = CalculateBoundingRectangle(boundingPlayer, rotationmatrix);//collisionRect = CalculateBoundingRectangle(collisionRect, rotationmatrix);
My player can move, but not close to the Collision wall at all and then he gets stuck and cant move
2/ If I uncomment the lines and move the rectangle (i get an array out of bounds excecption in the Intersect Pixels function
I am pretty sure i am just not approching it properly or doing simthing stupid, can anyone help me out? its been buggin me for hrs now hehe