示例#1
0
文件: Brick.cs 项目: kasbrik/kasbrik
        internal bool CollidesWith(Ball ball)
        {
            Rectangle ballRect = new Rectangle((int)ball.X, (int)ball.Y, Ball.Width, Ball.Height);
            Rectangle myRect = new Rectangle((int)this.X, (int)this.Y, Paddle.Width, Paddle.Height);

            return ballRect.Intersects(myRect);
        }
示例#2
0
文件: Brick.cs 项目: kasbrik/kasbrik
        internal void HandleBallCollision(Ball ball)
        {
            float distX, distY;

            if (ball.Velocity.X > 0)
            {
                if (ball.Velocity.Y > 0)
                {
                    // Collision from top left
                    distX = ball.X + Ball.Width - this.X;
                    distY = ball.Y + Ball.Height - this.Y;
                }
                else
                {
                    // Collision from bottom left
                    distX = ball.X + Ball.Width - this.X;
                    distY = this.Y + Brick.Height - ball.Y;
                }
            }
            else
            {
                if (ball.Velocity.Y > 0)
                {
                    // Collision from top right
                    distX = this.X + Brick.Width - ball.X;
                    distY = ball.Y + Ball.Height - this.Y;
                }
                else
                {
                    // Collision from bottom right
                    distX = this.X + Brick.Width - ball.X;
                    distY = this.Y + Brick.Height - ball.Y;
                }
            }

            if (distX > distY)
                ball.Velocity = new Vector2(ball.Velocity.X, -ball.Velocity.Y);
            else
                ball.Velocity = new Vector2(-ball.Velocity.X, ball.Velocity.Y);
        }
示例#3
0
文件: Paddle.cs 项目: kasbrik/kasbrik
 internal void HandleBallCollision(Ball ball)
 {
     ball.Velocity = new Vector2(ball.Velocity.X, -ball.Velocity.Y);
 }
示例#4
0
文件: Level.cs 项目: kasbrik/kasbrik
        private void CheckBallCollisions(Ball ball, GameTime gameTime)
        {
            if (this.Paddle.CollidesWith(ball))
                this.Paddle.HandleBallCollision(ball);

            for (int i = 0; i < this.Bricks.Count; i++)
            {
                Brick brick = this.Bricks[i];

                if (brick.CollidesWith(ball))
                {
                    // Rebound and remove brick
                    brick.HandleBallCollision(ball);
                    if (this.EventAggregator != null)
                        this.EventAggregator.Publish(new BrickDestroyedEvent(brick));
                    this.Bricks.Remove(brick);
                    break;
                }
            }
        }