Когда мяч движется с высокой скоростью, он может пробить ракетку. Это, безусловно, делает игру менее реалистичной - PullRequest
0 голосов
/ 30 мая 2020

Когда скорость очень высока, мяч проникает в ракетку, чтобы решить эту проблему, я попытался использовать «Пересечение» прямоугольника шара и прямоугольника ракетки, но проникновение все равно происходит. Ниже приводится метод столкновения исходной точки, b - мяч, p - ракетка. Более того, я пытаюсь установить, если мяч не попал в верхнюю, левую, правую, нижнюю часть или ракетку2, то он должен попасть в ракетку1. В результате мы не можем определить состояние, когда мяч летит.

Кто-нибудь знает, как это решить?

Спасибо

private bool CollisionOccurred()
        {
            // assume no collision
            bool retval = false;

            // heading towards player one
            if (m_ball.DX < 0)
            {
                Rectangle b = m_ball.Rect;
                Rectangle p = m_paddle1.Rect;
                retval =
                    b.Left < p.Right &&
                    b.Right > p.Left &&
                    b.Top < p.Bottom &&
                    b.Bottom > p.Top;
            }
            // heading towards player two
            else // m_ball.DX > 0
            {
                Rectangle b = m_ball.Rect;
                Rectangle p = m_paddle2.Rect;
                retval =
                    b.Left < p.Right &&
                    b.Right > p.Left &&
                    b.Top < p.Bottom &&
                    b.Bottom > p.Top;
            }

            return retval;

1 Ответ

1 голос
/ 03 июня 2020

Попробуйте добавить скорость мяча (как поле) для каждой из сторон прямоугольника.

retval = b.Left - b.velocity.X < p.Right &&b.Right+ b.velocity.X > p.Left &&b.Top- b.velocity.Y < p.Bottom &&b.Bottom+ b.velocity.Y > p.Top;
...