Форум 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)

__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]


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

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