PDA

Просмотр полной версии : анимация движения поезда


Smirnoff
06.09.2005, 16:48
Назрела необходимость (причем срочная) нарисовать поезд в движении.
Причем со всеми прямыми и поворотами.
Как вариант пробывал сделать каждый из вагонов клипом и прописать условия движения в зависимости от координат (повоторы делал с помощью _rotation и _x+= и _y+=)
Работает, но выглядит жутко коряво, потому как на поворотах нарушается целостность состава ..
Может есть другие способы ?

Leezard
06.09.2005, 17:00
вид какой?
сверху или изометрия?

Smirnoff
06.09.2005, 17:04
вобще-то аксонометрия, в 3-х координатах то есть ..

Smirnoff
06.09.2005, 17:09
видимость объемной картинки в принципе можно сделать нарисовав объемными символы локомотива и вагонов, но сейчас важнее сам алгоритм придумать ..
времени в обрез ..

Leezard
06.09.2005, 17:11
фигасе задача, это тебе надо либо скриптами рисовать трехмерный вагончик, либо спрайтами задавать, например 36 положений этого вагончика, это при условии что ты делаешь это в изометрии (как частный случай аксонометрии)

Leezard
06.09.2005, 17:16
Концептульно каким бы нибыл путь для каждого вагона тебе надо задавать три параметра x,y в переводе на изометрическую плоскость + угол поворота (номер кадра спрайтового набора).
Принципиально задача решаема. На каждом отрезке пути хранишь старые и новые значения координат, по разнице высчитываешь тригонометрическую величину поворота вагончика. И так для каждого объекта. Основной трабл здесь перевод из абсолютных координат в аксонометрию можно либо высчитывать параметрически либо создать массив-таблицу соответствий. Второе в контексте проще.

Smirnoff
06.09.2005, 17:33
Да нет, все не так страшно ..
С меня пока эмулятор железной дороги не требуют ))
Все немного проще - нужно нарисовать именно схематичное движение состава по путям, при этом вагончики можно вообще хоть параллелепипедами рисовать ..
Важно, чтоб в нужное время поезд ехал прямо (что элементарно), а в нужное поворачивал по направлению движения рельсов.
Причем не весь сразу естесственно, а все вагоны по очереди ...
Может вообще без явного указания координат можно обойтись и привязать движение вагонов к рельсам (по аналогии со "snap to path") ?

Leezard
06.09.2005, 17:49
понятно, тогда напрашивается использование хиттеста.
я так понимаю путь задается динамически.

Smirnoff
06.09.2005, 17:51
И еще немного в ту же сторону:
Если пользоваться моим методом ( _rotation, _x+=, _y+=)
возможно ли описать движение как функцию, чтоб потом просто вызывать ее для каждого объекта с параметрами исходных и конечных координат и угла поворота ?

Smirnoff
06.09.2005, 17:54
и в каком месте тут хиттест можно применить ?
я так понял он просто проверку двух клипов на пересекаемость производит ?
а путь задается именно динамически ..

Leezard
06.09.2005, 18:02
Путь задается динамически, имея функцию пути (скорее всего прямые отрезки) рисуем путь используя ActionScript. Получаем фигуру относительно которой будет двигаться состав. Например для каждого вагона прибавляем "y" пока не соприкоснемся с фигурой пути, если на новом шаге прикосновение существует, отнимаем "y". Поворот вычисляется соответственно.

Double
06.09.2005, 18:04
а путь-то вообще произвольной кривизны чтоли может быть? ты корявый вариант покажи чтоли, чтобы было понятно, чего тебе хочется.

Leezard
06.09.2005, 18:10
впринципе можно скриптами отрисовать путь любой кривизны, сложней конечно но можно.

PITer
06.09.2005, 22:38
т.к. движение в данном случае является дискретным, т.е. разбитым на набор статичных положений, возникает такой вариант: (предположим, что поезд вижется со скоростью 1 вагон в 10 кадров) на момент 10го кадра положение 1 го вагона (координаты и угол поворота) == положению паровоза в первом кадре, второго вагона в 10кадре == положение первого вагона в 1 кадре и тд.
кроме того возможно пригодится допущение о прямолинейности изменений, т.е. зная что в 10м кадре вагон будет на месте паровоза изменение координат и поворота поделить на десять и поочередно присваивать вагону (хотя это проканает только при незначительных поворотах).
если же говорить о эмуляторе железной дороги, то необходимо представить ось рельсов в виде функции (или множества точек расположеных настолько близко друк к другу, что отрезки между ними можно полагать прямыми) и располагать паровоз(и) вагоны так, чтобы их ось в области колес находилась над осью железной дороги.
кстати если кусок анимации небольшой то возможно проще его будет нарисовать руками...

Smirnoff
07.09.2005, 08:40
Высылаю текст скрипта и swf, потому что исходник не проходит по размеру (~900 кБ).
Проблема при проходе поездом 2-го поворота.
Помощь требуется срочно !!!

Double
07.09.2005, 09:39
скрипт не смотрел, но паравоз твой едет нормально :) разрыв состава не есть проблема скрипта, скорее проблема анимации. сделай между вагонами сцепку и не заморачивайся. я бы сделал это очень тупо: у каждого вагона прицепил бы маааленький мувик в месте сцепки, и ориентируясь на его координаты просто соединял бы соседние вагоны линией. это из разряда решений на скорую руку. а по-хорошему, надо рисовать дополнительные спрайты для движения по диагоналям (как минимум), у которых д.б. виден торец вагона и хотя бы один спрайтик для вагона, находящегося на стрелке. иначе плоский паравозик по угловатым путям в любом случае будет ездить неправдоподобно.

Smirnoff
07.09.2005, 09:45
Со спрайтами разбираться сейчас времени нет совсем, а по моему скрипту вопрос только один - почеему после 2-го поворота поезд не останавливается, хотя цикл должен прекращаться, а едет дальше по диагонали (возрастают x и y) ..

PITer
08.09.2005, 01:32
мне не хотелось бы никого обидеть, но скрипт несмотря на некоторую откоментаренность довольно крив (отслеживание состояний с помощью многих ифов приводит к сумбуру) поэтому рекомендую ознакомиться с этим скриптом, а вообще то говоря данную задачу (если нет глобальных) препятствий на мой взгляд надлежит решать не с помощью программирования, а посредством обычеых анимаций
(скрипт я писал минут сорок, а анимации таеого рода делать 10 минут)

Smirnoff
08.09.2005, 10:35
никто и не обижен по причине того, что в курсе глубины своих знаний в программировании на as ))
это всего лишь мой 3-й по счету скрипт с момента начала изучения as и относиться к нему дОлжно соответственно ..
я его кстати уже переделал основательно ..
все, качаю твой и сажусь за изучение ..
p.s. а по поводу непрограммной анимации - просто будет очень много подобных схем и отличаться они будут только координатами путей и стрелок, так что программно менять все это дело будет явно проще ..

Smirnoff
08.09.2005, 13:28
все-таки появляются сомнения ..
если основная задача - анимирование ж/д аварий и столкновений, то может действительно перейти на простую анимацию ?
схем придется рисовать много, но содержание примерно одинаковое - едет поезд или локомотив, в определенные моменты они должны поворачивать, в определенные сталкиваться и падать ..
все это нужно завязать со светофорами (цвет) и стрелками (2 положения) ...
что посоветуете ?

Smirnoff
08.09.2005, 17:56
to PITer:
посмотрел скрипт ...
мне конечно так самому бы не сделать ))
вопросы возникли:
- как подбирал координаты для массива описывающего поворот ?
- откуда взялся sin пи/4*2 и такой же косинус ?
- где задается количество вагонов (индекс "i"), то есть сколько их может быть ?