Я думал, что смогу найти это с некоторыми поисками в интернете, но все, что я нахожу, это просто отскакивающие от стен шары для чего-то вроде понга или другого произвольного вопроса. Я делаю 2D-игру для подземелий, и когда я убиваю врагов и они теряют добычу, я хочу, чтобы предмет вылетел, как если бы он только что был брошен в воздух, и приземлился случайным образом на плитку, на которой находился юнит.
Я пытался понять это сам, но не могу понять, об этом, вероятно, много спрашивают, я был бы очень благодарен, если бы кто-нибудь мог мне помочь.
РЕДАКТИРОВАТЬ В ЗАПРОСЕ:
Хорошо, когда монстр будет уничтожен, я выбрал бы случайное местоположение в пределах тайла, в котором он находится, давайте назовем это местоположение endLoc и местоположение монстра startLoc. Затем я бы нашел центральную точку x между этими двумя точками и уменьшил бы y на 20 (потому что именно на это количество пикселей я хочу, чтобы элемент увеличивался), поэтому давайте назовем эту переменную launchLoc:
launchLoc = new Vector2(startLoc.X + ((endLoc.X - startLoc.X) / 2), startLoc.Y - 20)
Я думаю, что это дает правильный Вектор.
Так что теперь мне нужно запустить элемент из startLoc, для launchLoc, а затем вернуть его обратно в endLoc. Это где это сбивает с толку, и я не уверен, как сделать реалистичную дугу для этого. Конечный результат заставил бы предмет двигаться, как будто он двигался по гауссиане, как если бы он был брошен в воздух.
Я пытался сделать так, чтобы во время каждого интервала скорость увеличивалась на 120-ую, от разницы Х, между startLoc и launchLoc, увеличивая кратность, но я не мог заставить ее работать очень хорошо. Я не уверен, что это был лучший способ сделать это. Я использую 120th, потому что значение y равно 20, и элемент перемещается вверх на 1 пиксель каждый интервал, поэтому при суммировании от 1 до 20 получается 120, это будет постоянно увеличивать движение x, как если бы его подбрасывали.
Это в 2D, кстати, я надеюсь, что это помогает.