Как анимировать прямоугольник на объекте Path2D в контексте Graphics2D


Я только начал изучать основы класса Graphics2D, до сих пор я могу рисовать различные объекты и реализовывать ActionListener, чтобы фактически перемещать их на экране с помощью onKeyPress. Пока все шло хорошо, а я думал сделать что-то более сложное. Я хочу датьпуть к моему объекту и анимировать его только на этом конкретном пути.

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

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

Начальная Точка:

Введите описание изображения здесь

Конечная Точка:

Введите описание изображения здесь

Теперь, как показано выше, моя желтая коробка(в будущей плоскости) должна придерживаться заданного пути при анимации (серая линия пути)

мои исследования до сих пор,

Я искал свои жужжащие слова. такие как path в java и найденные классы Path2D и GeneralPath, Кто-нибудь знает, могу ли я использовать это для решения этой проблемы.

Спасибо

4 5

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. Его код доступен в меню кода. Он делает то же самое, что вы пытаетесь сделать.