Как анимировать прямоугольник на объекте Path2D в контексте Graphics2D
Я только начал изучать основы класса Graphics2D, до сих пор я могу рисовать различные объекты и реализовывать ActionListener
, чтобы фактически перемещать их на экране с помощью onKeyPress
. Пока все шло хорошо, а я думал сделать что-то более сложное. Я хочу датьпуть к моему объекту и анимировать его только на этом конкретном пути.
Что-то вроде того, я нарисую линию на небе, и самолет должен придерживаться этой нарисованной линии и держать себя, чтобы летать по этой конкретной линии. Теперь это так возможно?
Мне не нужен какой-либо код, но несколько различных методов или идей позволят мне начать работать над этим. Визуализируйте развитие моей идеи, как показано ниже.Начальная Точка:
Конечная Точка:
Теперь, как показано выше, моя желтая коробка(в будущей плоскости) должна придерживаться заданного пути при анимации (серая линия пути)
мои исследования до сих пор,
Я искал свои жужжащие слова. такие как path в java и найденные классы Path2D
и GeneralPath
, Кто-нибудь знает, могу ли я использовать это для решения этой проблемы.
Спасибо
4 ответа:
Отлично !
Он напоминает мне о моих первых шагах в нем. Как мне нравились все эти простые математические вещи, но которые заставляют вещи двигаться на экране. :)На самом деле вам нужна линейная интерполяция . Есть и другие виды интерполяции, и некоторые api предлагают хорошую инкапсуляцию для концепции, но вот основная идея, и вам довольно часто понадобится этот материал:
Вы должны переписать свой путь
y = f (x )
Как функция времени:
В момент времени 0 элемент будет в начальной позиции, в момент времени 1 он достигнет конца. А затем вы увеличиваете время (t) по своему усмотрению (например, 0,001 каждой МС).
Итак, вот формула для простого линейного пути:
x = xstart + (xend-xstart) * t y = ystart + (yend-ystart) * t
Когда t изменяется, ваш объект будет просто двигаться линейно вдоль пути, линейно имеет скорость, которая будет постоянной на всем пути. Вы можете представить себе какое-то гравитационное притяжение в конце, например, это будет моделироваться квадратичным ускорением (t^2 вместо t) ...
С уважением, Стефан
Сначала сделайте возможность перемещения из точки А в точку Б. Это делается с помощью простой алгебры.
Во-вторых, сделайте возможность взять путь и перевести его в точки. Затем, когда вы собираетесь делать кривые, вы на самом деле просто двигаетесь от точки к точке вдоль этой кривой.Это самый простой способ сделать это и работает для большинства экземпляров.
То, о чем вы говорите, - это простая 2D-графика и спрайты. Если это все, что вам нужно, то для Java взгляните на Java 2D Sprites Если вы склоняетесь больше к или в конечном итоге пойдете с перспективами камеры и хотите посмотреть анимацию с разных углов, идите с Java 3D из открытого источника Java 3D.org в любом случае, то, что вы хотите, - это простой перевод объекта вдоль линии, довольно простой как в 2D, так и в 3D.
Вы можете попробовать пройти через код моего проекта колледжа с открытым исходным кодом - LANSim. Его код доступен в меню кода. Он делает то же самое, что вы пытаетесь сделать.