Подтвердить что ты не робот

Задача физики понга

У меня проблема, но я не знаю, как ее описать, поэтому я нарисовал ее.

Pong Physics Graphic

Как вы можете видеть отскок мяча при обнаружении столкновения. Nevermind the angle - я только что нарисовал его таким образом. Но иногда мяч проходит через весло, оставив его по-другому.

Почему это происходит? Станьте, когда я обнаруживаю столкновение, я меняю vx на -vx. Что мне делать в этом случае? Изменить также y? Но как проверить, какая сторона шарика весла ударила?

Возможно, другие идеи?

4b9b3361

Ответ 1

Это довольно распространенная проблема для людей, пишущих клоны для понга. Решение заключается в том, чтобы при обнаружении столкновения не только отменить скорость, но и изменить положение шара так, чтобы оно не пересекалось с лопастью.

В противном случае мяч может застрять внутри весла, постоянно отрицая vx = -vx = vx = -vx каждый кадр. Он не оставит весло до тех пор, пока его импульс y не переместит его достаточно далеко вверх или вниз, чтобы сбежать.

Ответ 2

Это может вызвать проблемы.

Примечательно, что если мяч может перемещаться более чем на один пиксель на "тик" или "кадр", он может пересекать лопасть более чем на несколько пикселей к моменту обнаружения столкновения.

Затем вы можете отбросить мяч от весла, изменив его скорость, но в зависимости от нового угла может потребоваться несколько кадров, чтобы мяч полностью покинул весло. Итак, на следующем тике он все еще пересекается, и вы снова меняете скорость. Уродное появление этого вполне может привести к тому, что мяч в конечном итоге покинет весло с другой стороны, и он пролетит прямо.

Возможно, вы захотите установить флажок "не сталкиваться на какое-то время" в этой комбинации весло-шара, когда сначала обнаружено пересечение.

Как связанная с этим проблема, если мяч идет достаточно быстро (особенно когда его x -компонент является самым высоким, например, когда мяч перемещается почти целиком горизонтально, так что есть наименьшее количество весла для него через), на самом деле не может быть никаких кадров, где мяч физически пересекает лопатку.

Все это зависит от вашего кода, который мы не можем видеть. Надеюсь, что вышеизложенное должно дать вам некоторые идеи.

Ответ 3

Ваш удивительный рисунок показывает мне, что вы не обнаруживаете вертикальное столкновение. Вы должны сделать то же самое, что и для координат x для координат y.

Ответ 4

Это обычно вызвано слишком быстрым движением мяча. Там, где один кадр движется к стене, а следующий кадр уже расположен за стеной. Rhe столкновения просто не происходит. Вы можете отрицать это, если смотреть дальше по траектории шаров и проверять препятствия.

Ответ 5

Решение, которое я обнаружил при создании понга, заключалось в том, чтобы использовать vx = abs (vx) при обнаружении столкновения с левым веслом и vx = -abs (vx) при обнаружении столкновения с правым веслом. это гарантирует, что мяч отскакивает только один раз, исключая движение внутри лопасти, вызванное несколькими отскоками.