Как анимировать Rectangle на объекте Path2D в контексте Graphics2D - PullRequest
5 голосов
/ 26 августа 2011

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

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

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

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

enter image description here

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

enter image description here

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

Мои исследования пока

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

Спасибо

Ответы [ 4 ]

2 голосов
/ 26 августа 2011

Отлично!

Это напоминает мне о моих первых шагах в IT. Как сильно мне нравились все эти простые математические вещи, но это заставляло вещи двигаться на экране. :)

На самом деле вам нужна линейная интерполяция. Существуют другие виды интерполяции, и некоторые API предлагают хорошую инкапсуляцию для концепции, но вот основная идея, и вам часто понадобятся эти вещи:

Вы должны переписать свой путь

y = f (x ) 

как функция времени:

во время 0 элемент будет в начальной позиции, во время 1 он достигнет конца. Затем вы увеличиваете время (t) по своему желанию (например, 0,001 каждые мс).

Итак, вот формула для простого линейного пути:

x = xstart + (xend-xstart) * t
y = ystart + (yend-ystart) * t

когда t изменяется, ваш объект будет просто линейно двигаться по траектории, линейно скорость будет постоянной на всем пути. Например, вы можете представить какое-то притяжение гравитации в конце, это будет моделироваться квадратичным ускорением (t ^ 2 вместо t) ...

С уважением, Stephane

1 голос
/ 26 августа 2011

Вы можете попробовать выполнить код моего проекта колледжа с открытым исходным кодом - LANSim . Код доступен в меню Код. Это похоже на то, что вы пытаетесь сделать.

1 голос
/ 26 августа 2011

То, о чем вы говорите, это простая 2D графика и спрайты. Если это все, что вам нужно, то для Java взгляните на Java 2D Sprites Если вы больше склоняетесь к перспективам камеры или будете в конечном итоге ориентироваться на них, и вам захочется просматривать анимацию под разными углами, как в Java 3D из OpenSource Java 3D.org . В любом случае вам нужно просто перевести объект вдоль линии, довольно просто в 2D или 3D.

1 голос
/ 26 августа 2011

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

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

Это самый элементарный способ сделать это и работает в большинстве случаев.

...