コード例 #1
0
ファイル: ABall.cs プロジェクト: liamwhan/pong
        private void CheckCollision(float deltaTime)
        {
            Vector2 nextPosition = Position + (Direction * Speed * deltaTime);

            if (nextPosition.X >= MaxX || nextPosition.X <= MinX)
            {
                Direction.X *= -1f;
            }
            APlayer player = (APlayer)ActorManager.CheckCollision(this);

            if (player != null)
            {
                Direction.Y *= -1f;
                if (VerticalLocation == VerticalLocation.Bottom)
                {
                    //Move outside Collision Boundary
                    Position.Y = player.CollisionBoundaryY - 1;
                }
                else if (VerticalLocation == VerticalLocation.Top)
                {
                    //Move outside Collision Boundary
                    Position.Y = player.CollisionBoundaryY + 1;
                }
            }
            if (nextPosition.Y >= _graphics.PreferredBackBufferHeight)
            {
                StateManager.GoalP2();
                Reset();
            }
            else if (nextPosition.Y <= 0)
            {
                StateManager.GoalP1();
                Reset();
            }
        }
コード例 #2
0
ファイル: ActorManager.cs プロジェクト: liamwhan/pong
        private static APlayer AABBCollision(ABall ball, APlayer player)
        {
            Rectangle rect1 = ball.DestinationRect;
            Rectangle rect2 = player.DestinationRect;

            return((
                       rect1.X < rect2.X + rect2.Width &&
                       rect1.X + rect1.Width > rect2.X &&
                       rect1.Y < rect2.Y + rect2.Height &&
                       rect1.Height + rect1.Y > rect2.Y
                       ) ? player : null);
        }