![]() |
Реализация поезда
Здравствуйте! Нужно сделать поезд, движущийся по рельсам, которым можно было бы свободно управлять - задавать направление движения, скорость и т.п.
Не знаю, как заставить вагоны следовать в точности один за другим. Подскажите:) |
Ответ: Реализация поезда
Ну как минимум каждому вагону знать своего ведущего вагона, и повторять всё за ним.
|
Ответ: Реализация поезда
Возможно стоит спросить автора вот этой игры http://forum.boolean.name/showthread.php?t=13482
Задачка конечно интересная... |
Ответ: Реализация поезда
|
Ответ: Реализация поезда
Эх. Что такое поезд? Это змейка!!! Пишем змейку
|
Ответ: Реализация поезда
Цитата:
Если много, то знать расстояниие от каждого из вагонов до паровоза и его (паровоза) пройденную траекторию. |
Ответ: Реализация поезда
Непори чушь, каждый вагон в непосредственой близости от "родительского", причём тут число?каждому следующему вагону нужно проехать там де и с той же скоростью что и предыдущий вот и всё...
|
Ответ: Реализация поезда
Тут еще надо попасть колесами в рельсы и в соединительные звенья...
|
Ответ: Реализация поезда
наверное мы думаем на разных языках.... точнее я на языке, а вы на блоках.
|
Ответ: Реализация поезда
Я думаю что первым делом, нужно научится елозить вагон по рельсам вперед/назад на какое нибудь расстояние. Ну там по кривой какой-нибудь, по прямой конечно легче.(Как вы это будете делать я не знаю).А дальше уже проще:
Простая но дубовая версия: Двигаем локомотив синхронно с вагонами. 1вагон стоит на расстоянии 10 метров от локомотива, 2 на расстоянии 20 метров, 3ий 30 и т.д. Если передвинули локомотив на 3 метра вперед, автоматический двигаем все вагоны на 3 метра вперед. Вагоны и поезд будут двигаться синхронно. Сложная версия: Если локомотив(тот который тянет вагоны) на большом расстоянии от 1-ого вагона, то вагон подтягиваем к локомотиву. Если 1-ый вагон слишком близко к локомотиву, отгоняем его назад от локомотива. Таким способом при каждом Update сканируем весь поезд от первого вагона к последнему. Замеряя расстояния между локомотивом и 1 вагоном, потом между 1 вагоном и 2 вагоном, 2 и 3 и т.д. до конца. Можно подтягивать вагоны постепенно за несколько Update() чтобы создать иллюзию растягивания(при разгоне)/сжатия(при тормозе) состава. Тогда если вы будите двигать локомотив, то вагоны будут выстраиваться за ним. Не забывайте что вагоны и поезд должны быть как-то привязаны к рельсам. То есть вправо и влево сползать нельзя, только вперед/назад по проложенной колее. Как вы будете это делать не знаю. Я думаю как-то так. |
Ответ: Реализация поезда
Никто не проникся моей идеей(
Есть паровоз, линия его траектории и у каждого вагона расстояние до паровоза. Перемещаем паровоз куда нам надо, потом все вагоны ставим на линию его траектории каждый на заданном расстоянии от паровоза. |
Ответ: Реализация поезда
Цитата:
|
Ответ: Реализация поезда
в принципе, смотря как реализованы рельсы. Можно в принципе иметь скорость состава, и прибавлять ее к переменной l в типе Train. Потом нужно получать для каждого вагона его поворот и позицию через функцию, которая берет эту самую L, и возвращает их.
|
Ответ: Реализация поезда
Путь можно представить как одну кривую (ломаную) между рельсами. Вагон имеет две тележки, которые едут по рельсам. Эти две тележки можно представить как две точки, которыми вагон стоит на кривой.
Моя предыдущая идея подходила только для движения по траектории, близкой к прямой(( |
Ответ: Реализация поезда
Чем гадать, надо сначала познакомиться с устройством поезда ИМХО.
|
Ответ: Реализация поезда
ужос, проблему придумали.
рельсы задавать сплайном. вагон ориентировать по паре "колес" (как называются эти площадки с колесами?). поезд это список вагонов, вагон это пара "колес". все параметрически сдвигаем на определенное растояние вдоль кривой. если нужно ускорение - замедление - можно каждый последующий с определенным коэффициентом. и пружины для дампинга. ну какбэ и все. |
Ответ: Реализация поезда
Цитата:
https://docs.google.com/drawings/edi...thkey=CPLP6pMG |
Ответ: Реализация поезда
Переделал картинку в соответствии вот с этой фоткой:
![]() получается нечто следующее ![]() Т.е. если упростить задачу до расстановки колес по траектории, а по самим колесам расставлять вагоны и соединительные части - все выглядит достаточно не сложно. Можно действительно задать определенное расстояние между колесами в вагоне и между колесами между вагонами и не париться. Спасибо ffinder'у |
Ответ: Реализация поезда
ffinder и pax, большое спасибо за идею!
Но каким образом заставить колеса поезда двигаться точь-в-точь по сплайну? |
Ответ: Реализация поезда
Цитата:
|
Ответ: Реализация поезда
Подкинь идейку пожалуйста - в общих чертах:)
|
Ответ: Реализация поезда
Ну надо научиться по сплайну перемещаться на определенное расстояние на не просто по параметру. Дальше задавая расстояния между колесами располагать из вдоль сплайна.
|
Ответ: Реализация поезда
Спасибо! Буду пробовать:)
|
Ответ: Реализация поезда
мне кажется, здесь прокатит простой pointTo c translate'ом каждого последующего вагона к предыдущему. нужно только регулировать скорость поворота от скорости движения. в итоге имеем: каждый следующий вагон начинает и заканчивает движение плавно, одинакого легко работают как повороты так и спуски подъемы, по сплайну ведем только головной вагон остальные повторяют пройденую форму пути.
Или еще можно построить физическую цепочку(за физику пока не брался)) |
Ответ: Реализация поезда
Самый реальный вариант предложи Pax
|
Ответ: Реализация поезда
Illidan, уже пробовал так. Не получается. Вагонов очень много - штук 50- они сбиваются с заданной траектории.
|
Ответ: Реализация поезда
Цитата:
|
Ответ: Реализация поезда
|
Ответ: Реализация поезда
Цитата:
|
Ответ: Реализация поезда
Цитата:
|
Ответ: Реализация поезда
Над проблемами движения локомотивов и вагонов по рельсам, следованию вагонов за поездом и пр. бился достаточно долго. Переходил от одной реализации к другой.
Остановился на таком варианте (в 3d-пространстве). Ж\д-полотно - это набор геометрических точек, т.е. цепочек объектов. Отдельные цепочки связаны между собой т.н. узлами или "стрелками". Локомотив располагается в n-ую точку цепи и начинает движение к следующей точке. Приращение может быть как положительным, так и отрицательным. Движется он к следующей n+1 или n-1 точке в цепи. Но, как верно отметил Pax, у поезда 2 пары тележек, т.е. два центра вращения. Соответственно, мы движем набор из двух тележек с фиксированным расстоянием и определяем координаты x,y,z средней точки между ними (на примере blitz3d). mid_x#=EntityX(e1)+(EntityX(e2)-EntityX(e1))/2 mid_z#=EntityZ(e1)+(EntityZ(e2)-EntityZ(e1))/2 mid_y#=EntityY(e1)+(EntityY(e2)-EntityY(e1))/2 В точку с такими координатами помещаем модель нашего поезда. Ландшафт может иметь подъёмы, спуски, поэтому помещать модель в эту точку при движении будет правдоподобнее. Далее определяем разницу углов между следующей рельсой и поездом. dy#=DeltaYaw(r\ent,tr\ent) dp#=DeltaPitch (r\ent,tr\ent ) и постепенно уменьшаем вращением модели эту разницу - поезд будет входить в повороты, плавно спускаться с гор и пр. Итак, последовательность всех колёсных тележек поезда и вагонов - это своего рода змейка. Тут всё просто - движем каждую тележку с одинаковой скоростью и вагоны покатятся следом за локомотивом (каждая из них будет в точности повторять траекторию движения предыдущей). Это вкратце. |
Часовой пояс GMT +4, время: 10:42. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot