Проблема физики понг - PullRequest
       14

Проблема физики понг

18 голосов
/ 03 апреля 2011

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

Pong Physics Graphic

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

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

Может быть, другие идеи?

Ответы [ 5 ]

29 голосов
/ 03 апреля 2011

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

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

10 голосов
/ 03 апреля 2011

Проблема может быть вызвана несколькими причинами.

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

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

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

В качестве связанной проблемы, если мяч движется достаточно быстро (особенно, когда его x -компонент самый высокий, например, когдамяч движется почти полностью горизонтально, так что весла меньше, чтобы он мог его пройти), на самом деле может не быть рам, где мяч физически пересекает весло.

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

0 голосов
/ 13 августа 2017

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

0 голосов
/ 03 апреля 2011

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

0 голосов
/ 03 апреля 2011

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

...