Hello, this is my first post here on XNA, and I'm super new to XNA and C#, been programming in VB.NET for a bit now, no games, just applications. But I decided to dive in to Game Development with C#. So here's my problem:
I have collision detection for my ViewPort (Window) when ever I go Left, Right, Top, Down with my Player, but say I go Top Left, my collision doesn't accept it when the player for example hits the TOP WALL but not the LEFT wall, It will how ever accept the collision when it Hits both of them at the same time. Here's my exact code that I'm using for it.
| protected override void Update(GameTime gameTime) |
| { |
| keyState = Keyboard.GetState(); |
| if (keyState.IsKeyDown(Keys.Escape)) |
| { |
| this.Exit(); |
| } |
| if (keyState.IsKeyDown(Keys.D)) { player.velocity = new Vector2(player.speed, 0); } |
| if (keyState.IsKeyDown(Keys.A)) { player.velocity = new Vector2(-player.speed, 0); } |
| if (keyState.IsKeyDown(Keys.W)) { player.velocity = new Vector2(0, -player.speed); } |
| if (keyState.IsKeyDown(Keys.S)) { player.velocity = new Vector2(0, player.speed); } |
| |
| if (keyState.IsKeyDown(Keys.D) && keyState.IsKeyDown(Keys.W)) |
| { |
| if (right == false || top == false) |
| { |
| player.velocity = new Vector2(player.speed, -player.speed); |
| } |
| else { right = true; top = true; return; } |
| |
| } |
| if (keyState.IsKeyDown(Keys.D) && keyState.IsKeyDown(Keys.S)) |
| { |
| player.velocity = new Vector2(player.speed, player.speed); |
| } |
| if (keyState.IsKeyDown(Keys.A) && keyState.IsKeyDown(Keys.W)) |
| { |
| player.velocity = new Vector2(-player.speed, -player.speed); |
| } |
| if (keyState.IsKeyDown(Keys.A) && keyState.IsKeyDown(Keys.S)) |
| { |
| player.velocity = new Vector2(-player.speed, player.speed); |
| } |
| if (right == false && keyState.IsKeyDown(Keys.D) || |
| left == false && keyState.IsKeyDown(Keys.A) || |
| top == false && keyState.IsKeyDown(Keys.W) || |
| bottom == false && keyState.IsKeyDown(Keys.S)) |
| { |
| MovePlayer(); |
| } |
| base.Update(gameTime); |
}
//COLLISION
private void MovePlayer() |
| { |
| keyState = Keyboard.GetState(); |
| if (player.alive) |
| { |
| Rectangle playerRect = new Rectangle((int)player.position.X, (int)player.position.Y, player.sprite.Width, player.sprite.Height); |
| if (player.position.X <= (viewportRect.Left - 10)) |
| { left = true; } |
| else { left = false; } |
| if ((player.position.X + player.sprite.Width) >= (viewportRect.Right)) |
| { right = true; } |
| else { right = false; } |
| if (player.position.Y <= (viewportRect.Top)) |
| { top = true; } |
| else { top = false; } |
| if ((player.position.Y + player.sprite.Height) >= (viewportRect.Bottom)) |
| { bottom = true; } |
| else { bottom = false; } |
| |
| player.position += player.velocity; |
| } |
| else |
| { |
| player.alive = true; |
| } |
| } |
|