Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   карта маршрутов (http://www.flasher.ru/forum/showthread.php?t=74046)

Shyroop 10.01.2006 16:25

карта маршрутов
 
Подскажите, как можно создать карту маршрутов. если есть порядка 50 городов и нужно, чтобы при наведении на город маршрут подсвечивался, а при клике, оставался гореть и можно было бы выбрать другой город только из выбранного маршрута. уфф.. вроде понятно изложил :) типа как на этом сайте

Sh@man 10.01.2006 17:10

Можно создать, например, заплатив $$$ флеш-разработчику.

Trains 10.01.2006 19:15

Если данные не нужно брать из базы, то к каждому городу делаешь отдельный мувик, где спрятаны города назначения, при наведении они появляются, при нажатии остаются, а при нажатии на другой город, пропадают все кроме нажатого. Это просто и быстро, а если из базы получать данные - запарися, лучше правда заплатить флешеру:)

Shyroop 10.01.2006 19:21

так я сам хочу научиться, чтобы потом мне все платили ;) :D мне сам принцип интересен. а ручками прописывать не особо весело, должен быть другой способ! :)

Shyroop 10.01.2006 19:23

я думал в форуме помогают, а не свою рекламу делают! думаю админам надо о таких "комерсантах" позаботится!!! :(

__i 10.01.2006 19:25

все просто, теория графов + немного деревьев и решение задачи твое %)))

храни в базе координаты городов и пункты в которые можно из них улететь грузи из базы из список и все %)) все просто %))) нужно только немного в мат части разобраться %))

__i 10.01.2006 19:28

даже не пункты а ссылки на эти пункты (по ссылке ты можешь вытянуть всю инфу о пункте: название координаты.....) и твоя забота оптимизировать и придумать способы работы с твоим деревом

Shyroop 10.01.2006 19:29

а можно немного поподробнее? а не спец во Flash'e...

Shyroop 10.01.2006 19:37

хм...ну с этим вроде понятно... тогда по идее город можно будет даже из админки добавлять, а как с маршрутами? чтобы они подсвечивались вместе с городом и оставальсь после нажатия?

Trains 10.01.2006 19:56

при нажатии подсвечиваешь все города в которые можно улететь а маршруты рисуешь динамически по координатам городов, при нажатии на видимый второй город, тушишь остальные, убираешь события к ним, стираешь все маршруты и рисуешь один нужный...

KPaul 10.01.2006 20:54

Если это реальная карта, а не кружочки соединенные прямыми линиями, то нужны координаты(точки), по которым будут строится кривые.
Можно конечно просто их нарисовать и не париться, но как например
обсчитать пересечения, кратчайший путь и тд.
Есть несколько подходов в построении маршрутов - один из них(как уже сказали) это графы.
Вот ссылка на крты метро, где динамически считается кратчайшее расстояние между станциями. Поддержки сервера нет, поэтому высчитывание алгоритмов, даже в таких небольших маштабах, занимает на мой взгляд просто неприлично много времени.
http://kvarta.ukrwest.net/subway/subway.swf

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

Shyroop 11.01.2006 11:38

у меня этого не требуется, у меня просто кружочки соединенние линиями :) хотел узнать, как если пришли какие-то данные, сделать button onMouseOver ??? т.е. если а=1, то button onMouseOver если нет, то просто button.

__i 11.01.2006 14:40

2KPaul, поиск кратчайшего пути на графе довольно ресурсоемкая задача, не важно на сервере это будет считаться или в самой флешке, это займет очень много времени если много соеденений, все зависит от алгоритмов и оптимизации которую ты спользуешь.

для примера, было как-то у моего знакомого ДЗ дана таблица букв 10х10 (100% есть все буквы алфавита), нужно было найти такой путь в этой таблице чтоб были выбраны все буквы алфавита и при этом ни одна из них не повторялась - на пне 233 (%)) ) думало это все ДЗ почти 2 часа %)). Причем он юзал правильные алгоритмы%))

2 Shyroop читай хелп, пробуй не используй кнопки используй мувиклипы, для затравки
Код:

var _mc=this.attachMovie('mc_linkage_name','mc',this.getNext.....);
_mc.a=Math.random(2);
_mc.onRelease = function(){
if (this.a==1){
trace('хорошо')
}
else
trace('плохо')
this.a=Math.random(2);
}


valvika 11.01.2006 14:58

Видел я этот проект в разделе Работа. Похоже Заказчики нашли своего девелопера. :D
Стоимость работы, на которую ты ссылаешся, на мировом рынке флеш-разработок $500-800. Если бы ее мог сделать начинающий, то она бы стоила - $30.

Sh@man 11.01.2006 17:57

Цитата:

Сообщение от valvika
...Если бы ее мог сделать начинающий, то она бы стоила - $30.

Если бы...Если бы молодость знала, если бы старость могла...

valvika 11.01.2006 18:51

Здесь большая вероятность наличия go-betweens ( посредника или даже длинной цепи посредников ) которые рассуждают примерно так: "А вдруг какой-то олух сделает это за 30, а я потом всупоню заказчику за 500. Нормально - 3 таких операции за месяц и можно больше ни хрена не делать." Но блин, те кто берется делать это за 30 - обычно делают *****, которое конечный заказчик не принимает. В результате все остаются с носом.

Shyroop 11.01.2006 19:03

да не партемь вы это все не то! я этой объявы даже не видел, только не согу понять, почему на этом форуме все так парятся из-за денег... даже если я и взялся за эту работу и задал вопрос в этом форуме что такого??? в пхп форумах народ просто помогает чем может и не парится скока денег за это должны заплатить или не говорят, что тебе это не позубам, брось это все, иди лучше пива попей... даже новичек понимает, что это работа не на 30 и не на 50 $. ладно, спасибо за помощь, я уже вроде придумал... конечно немного не то, что планировал, но вроде работает!:)

__i - а что этот скриптик дает? неуловил...

valvika 11.01.2006 19:44

Цитата:

Сообщение от Shyroop
... в пхп форумах народ просто помогает чем может и не парится скока денег за это должны заплатить или не говорят, что тебе это не позубам, брось это все, иди лучше пива попей..

Смотриhttp://www.flasher.ru/forum/showthread.php?t=71117 .
Я ничего не говорю против тебя. Но, буду откровенен, не люблю кормить "go-betweens", не люблю когда кормят другие и работаю с ними очень жестко. Я не имею ввиду полезных и нужных посредников - людей разбивающих проекты на мелкие части, пишущих четкие спецификации, снимающих с разработчика бремя общения с заказчиком, умеющих уговорить заказчика отказаться от бредовых мыслей и т.п.
ПХП - интересный продукт. У нас очень многие считают себя ПХП-кодерами, хотя их кодерство состоит только в умении "надергать" свободные исходники. Насколько мне известно, здесь это не катит - да тебе помогут, дадут идеи, выскажут свое мнение - но полную кодировку проекта ты будешь делать сам или за деньги. Я уволил с работы недавно такого "горе-пхп-кодера": вижу работающий аналогичный проект в нете, а он мне заявляет, что не может это сделать т.к. этого нет в библиотеках и в свободных исходниках.

__i 11.01.2006 20:03

Сриптик дает тебе маленький пример, замени onRelease ,на onRollOver , посмотри расширь этот пример на толпу мувикой подумай и будет те счастье, или карта, смотря чего захочиться

Antares 11.01.2006 20:05

Главная трудность начинающего -- невозможность расценить свои силы. "Объясните чуть-чуть подробнее..." -- и все. При этом человек не подозревает, что подробнее придется объяснять час-другой в лучшем случае.

__i 11.01.2006 20:06

а работы там не на много, если сильно не заморачиваться на прорисовку, то движек можно этак за день - два накидать%))

valvika 11.01.2006 20:31

Цитата:

Сообщение от __i
а работы там не на много, если сильно не заморачиваться на прорисовку, то движек можно этак за день - два накидать%))

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

MIX-er 12.01.2006 13:39

Цитата:

Сообщение от Shyroop
так я сам хочу научиться, чтобы потом мне все платили ;) :D мне сам принцип интересен. а ручками прописывать не особо весело, должен быть другой способ! :)

Вообщето обучение тоже денег стоит((

Теоретически ты можешь и сами города в базе держать с названиями...

__i 12.01.2006 15:05

Цитата:

Сообщение от valvika
Не забывай про админ-часть. Самостоятельное добавление пользователем городов ( аэропортов ) и маршрутов в базу. Неделька уйдет, если нет отлаженных на предыдущих проектах скриптов.

гы гы я это флеш части для скорости существует такое понятие как разделение труда, админку пишут ПХП/АСП/.... програмеры флеш часть флешеры. Во те и 2 дня, ну а если все самому то это естественно больше

Кстате у меня такое подозрение что админка в примере сдалана именно в чистом НТМЛ (ПХП) без флеша %)

Shyroop 12.01.2006 22:01

Цитата:

Сообщение от MIX-er
Вообщето обучение тоже денег стоит((

MIX-er ты с меня хочешь за обучение денег взять??? :eek:
так ты же ничем не помог :D

на самом деле, с админкой я не заморачиваюсь, т.к. народ не захотел, а я предлагал. так что все будет до безобразия просто во Flash'e :)
а если и будут изменения, то ручками их внести будет мах 5 мин

valvika 16.01.2006 08:16

Цитата:

Сообщение от Shyroop
... т.к. народ не захотел, а я предлагал...

Ну вот, а говорил
Цитата:

Сообщение от Shyroop
... я этой объявы даже не видел,...

Можешь показать, что получилось?

Shyroop 19.01.2006 13:41

ок, покажу, только еще не совсем готово! думаю завтра закончу!!! :)

MIX-er 19.01.2006 16:50

Цитата:

Сообщение от Shyroop
MIX-er ты с меня хочешь за обучение денег взять??? :eek:
так ты же ничем не помог :D

на самом деле, с админкой я не заморачиваюсь, т.к. народ не захотел, а я предлагал. так что все будет до безобразия просто во Flash'e :)
а если и будут изменения, то ручками их внести будет мах 5 мин

мне есть за что деньги получать...

и пережёвывать темы которые уже поднимались на форуме желание есть не у всех...

Iv 20.01.2006 01:36

Shyroop, в общем твоя задача состоит из трех основных частей:
1) построение карты городов на основании данных сервера (XML)
2) админ карты для добавления городов и маршрутов
3) подсветка маршрутов.

пойдем по порядку:

1. построение карты городов на основании данных сервера (XML)

тебе от сервера нужен XML вида:
Код:

<map>
 <city id="0" _x="50" _y="50" to="1,2,3,4,5,6">
  <![CDATA[<B>Москва</B>]]>
 </city>

 <city id="1" _x="50" _y="20" to="0,2,3,4,5,6">
  <![CDATA[Питер]]>
 </city>

...............

</map>

где to - это id-шники городов с которыми связан данный город,
остальное, думаю, понятно.

после загрузки XML ты попросту бежишь по узлам типа:
Код:

_root.xml_url = _root.xml_url.length ? _root.xml_url : 'map.php';
this.map_xml = new XML();
this.map_xml.ignoreWhite = true;
this.map_xml._parent = this;
this.map_xml.onLoad = function(ok) {
        if (this.status or !ok) {
                return trace('loaded: '+ok+' valid: '+!this.status);
        }
        this._parent.BuildMap(this);
};
this.map_xml.load(this.xml_url);
//
this.BuildMap = function(in_xml) {
        var depth = this.getNextHighestDepth();
        var city_holder_mc = this.createEmptyMovieClip("city_holder_mc", depth);
        var node = in_xml.firstChild.firstChild;
        var i = 0
        while (node) {
                city_holder_mc.attachMovie("city_mc", "city"+(i++)+"_mc", i, {in_xml:node});
                node = node.nextSibling;
        }
};

- при этом твой мувик, залинкованный в либе как city_mc должен быть членом класса, например City.
в конструкторе класса копируешь атрибуты в мувик:
Код:

var obj = this.in_xml.attributes
for (var i in obj) {
        this[i] = obj[i]
}

и твой город становится на место.
затем отображаешь имя:
this.name_txt.htmlText = this.in_xml.firstChild.nodeValue
и настраиваешь текст поле типа:
this.name_txt.autoSize = true
и всё такое.

всё, все стоят по местам и отображены.

организация подсветки проста:
в том же конструкторе делаешь объект,
который тебе укажет на наличие связи с городами:
Код:

this.to_cities_obj = {}
this.to = this.to.split(",")
var length = this.to.length
for (var i=0;i<length; i++){
this.to_cities_obj[this.to[i]] = true
}

и впоследствии ты легко можешь узнать ниличие такой связи вот так:
Код:

finction isCityConnected  (city_id) {
        return Boolean(this.to_cities_obj[city_id])
}

город обязательно подключаешь к вещателю, можно к вещателю класса,
можно к другому как кому нравится, но в любом случае при клике
вещаем событие и передаем в качестве параметра свой id и координаты:
Код:

function onRelease () {
какой_то_вещатель.broadcastMessage("onShowLines", this.id, ths._x, this._y)
}

и разумеется у городов должен быть обработчик события:
Код:

function onShowLines (id, x, y) {
        if (isCityConnected(id)) {
                this.drawLineToCity(x,y)
        }
}

думаю, тут дальше всё понятно и можно перейти к следующей части:

2. админ карты для добавления городов и маршрутов
я админ совмещаю с картой. т.е. это всегда один проект.
карта это всегда заодно и админ.
просто, чтобы карту показать в режиме админа, я использую передачу
через flashvars переменной, например admin=true и далее проверяю
if (_level0.admin=="true"){
// значиццо админский режим.
}

тут всё тоже очень просто:
если админский режим, то при драге меняем координаты у города - мувика, например:
Код:

function onPress () {
        this.startDrag()
}
function onMouseUp () {
        this.stopDrag()
        this.updateXML()
}
function updateXML () {
        this.in_xml.attributes._x = this._x
        this.in_xml.attributes._y = this._y
}

практически то же самое делаешь, когда изменяется текст названия города, только делаешь это на событие потери фокуса у текст поля.
(естественно, в админском режиме оно должно быть редактируемым)

и при установлении связей добавляешь id города в массив to и присваиваешь его соответствующему атрибуту:
this.in_xml.attributes.to = this.to.join(",")

таким образом твой XML в админке всегда готов к отправке и записи на сервак.

остальное, надеюсь разберешься.

удачи,
iv

Iv 20.01.2006 01:41

[offtop]нда... меня бы на работе прибили, если бы такой проект я делал больше 4х часов.[/offtop]

valvika 20.01.2006 02:24

Цитата:

Сообщение от BitSky
[offtop]нда... меня бы на работе прибили, если бы такой проект я делал больше 4х часов.[/offtop]

Маэстро, в таком случае вы зарабатываете себе прилично и на содержание офиса, менеджера, бухгалтера и т.п. перепадает. ;) Это не мое дело - просто реплика напрашивалась.

Одно замечание. Коорды городов в ХМЛ удобнее хранить в географическом формате ( долгота/широта ). Человечество не даром их придумало. Они дают универсальность. В этом случае быстро можно дописывать всякие дополнения: типа точных расстояний между городами и т.д. Код становится многоразовым - меняется карта: не проблема - привязал новую к гео-коордам и вопрос решен. Тогда и за 2 часа можно будет штамповать аналогичные проекты.

Antares 20.01.2006 02:30

Иван, спасибо, что разрулил, не пожалев 10-15 минут своего времени на писанину таких очевидностей.

Iv 20.01.2006 03:06

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

а что делать, если:
- карта очень условная и не очень вяжется с реалиями?
- на ней есть врезки из других уголков земного шара, которые не попали в текущий участок?
- широта и долгота неизвеснты до такой точности, например, на карте отделов магазина :)

сколько таких "если" еще нужно? насыплю.

для целей, тобой описаных юзаются таблицы.

настоятельно рекомендовал бы очень серьезно подумать перед тем,
как использовать реалии нашего мира в программировании :)

valvika 20.01.2006 04:28

Цитата:

Сообщение от BitSky
...я не завидую твоему работодателю

Такого нет. В одном лице и разработчик и директор и бухгалтер.
Цитата:

Сообщение от BitSky
...- перевод широты/долготы и обратно на текущую карту
весчь далеко не очевидная и помимо чисто математических проблем
потребует от дизайнера рисования точной раскладки катры.

Мир многообразен. Одному легче работать с долготой/широтой, другому, например, бросить ООП-взгляд на цикл for().
Цитата:

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

Нужны. Недавно сделали учет земельных участков в одном городе.;)
Цитата:

Сообщение от BitSky
...а что делать, если:
- карта очень условная и не очень вяжется с реалиями?
- на ней есть врезки из других уголков земного шара, которые не попали в текущий участок?
- широта и долгота неизвеснты до такой точности, например, на карте отделов магазина :)
сколько таких "если" еще нужно? насыплю.:)

Никто не говорит, что существуют универсальные решения. Каждый метод применяется в определенном классе задач.
Цитата:

Сообщение от BitSky
...настоятельно рекомендовал бы очень серьезно подумать перед тем, как использовать реалии нашего мира в программировании :)

Думаю. Если бы не думал - не писал.
И еще, Чужое мнение мне всегда интересно. Спасибо.

По моему твой код не поможет начинающему решить задачу. Молоразжевано. Хотя ...люди разные бывают. Так что он будет делать все равно по своему.

Iv 20.01.2006 04:54

vavilka, я про OOP, типизацию, паттерны проектирования и т.п. вообще молчу пока.
потому как во-первых уровень кодинга в ответе должен соответствовать
уровню вопрошающего/вопроса, о котором, как правило, несложно догадаться.
а во-вторых я и сам не ангел, часто предпочитаю не заморачиваться там,
где это не требуется.

Баннеру баннерово, ричу ричево (© Ivan Dembicki, 2006).

Цитата:

Сообщение от valvika
Одному легче работать с долготой/широтой, [.....]
Недавно сделали учет земельных участков в одном городе.;)

- надеюсь, ты успешно применил долготу и широту? :D


Цитата:

Сообщение от valvika
Молоразжевано.

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

удачи,
iv

Antares 20.01.2006 05:10

Закрыто нахрен.

P.S. Дать им направление... их иногда лицом к двери поставишь и ключ дашь -- так и будут стоять...


Часовой пояс GMT +4, время: 10:18.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.