Создать функцию, которая использует вектор скорости объекта, чтобы определить, происходит ли столкновение с прямоугольником, и если да, то с какой стороны прямоугольника - PullRequest
0 голосов
/ 11 апреля 2020

Я играю в кирпичную игру в Javascript и пытаюсь улучшить функцию проверки столкновений. Я хочу знать, как я могу использовать вектор скорости мяча, чтобы определить, попадет ли мяч в кирпич и какая грань кирпича была поражена, чтобы я мог соответственно изменить скорость значения x или y шара.

Я думаю, что если я создам переменную, которая отслеживает значения x и y центра шара, то я могу лучше проверить, произошло ли столкновение.

например, если скорость мяча равна 4 единицам по x и 5 единицам по y при каждом обновлении игровой функции, то

xVector = 4 * time + (начальное значение x с последнее столкновение)

и

yVector = 5 * время + (начальное значение y с момента последнего столкновения)

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

Я думаю, что могу сделать эту функцию и обновить время с помощью игры (deltaTime), создав переменную времени и время ++ после каждой итерации игры. Но это не смотрит в будущее, оно только смотрит на то, что происходит в настоящее время.

Как я могу предсказать, какой кирпич будет поражен следующим сразу после столкновения?

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

Я попробовал альтернативный метод, который я только что описал, и мне было трудно избавиться от некоторых ошибок (см. Мой предыдущий вопрос), поэтому я решил, что я попробую другой подход вообще.

У кого-нибудь есть мысли или идеи?

...