Показать сообщение отдельно
Старый 20.01.2006, 01:36
Iv вне форума Посмотреть профиль Отправить личное сообщение для Iv Посетить домашнюю страницу Iv Найти все сообщения от Iv
  № 29  
Iv
 
Аватар для Iv

Регистрация: Apr 2001
Адрес: Moscow
Сообщений: 1,475
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