Я пытаюсь создать карту округа Иллинойс, используя координаты x, y из файла shp. У меня есть координаты x, y и названия округов, сохраненные в CSV-файле, в котором у меня нет проблем с чтением с помощью ActionScript 3 (и карта выглядит великолепно), но чтобы сэкономить время в своем будущем приложении, я хотел бы сохранить каждый Форма графства как постоянная форма в моем приложении и присваивает им метки, т.е. Sprite1 (label = 'Champaign'). Это возможно? Если это так, любая помощь будет принята с благодарностью.
Если это невозможно, я пытаюсь найти альтернативное решение: я создаю новый спрайт (var spr: Sprite = new Sprite ();) для каждого округа, рисую его с помощью spr.graphics.drawPath и присваиваю ему name (spr.name = 'Champaign') и затем "проталкиваем" его в вектор спрайтов (var xy_sprites: Vector. = new Vector. ();). Это было бы здорово, но это не работает, когда я пытаюсь перебрать каждый спрайт в векторе и добавить EventListener к этому спрайту, чтобы выскочить имя, когда вы вызываете MouseOver в любом из округов. Не является ли тип данных Sprite неправильным способом или я что-то упускаю в Sprites?
Часть моего кода для рисования фигур и сохранения в векторе:
function drawXYMap(str:String):Vector.<Sprite> {
var arr:Array = str.split("\n");
var xy_Sprites:Vector.<Sprite> = new Vector.<Sprite>();
for (var i:int=0; i<arr.length-1; ++i) {
var spr:Sprite = new Sprite();
spr.graphics.lineStyle(1.0, 0x000000);
spr.graphics.beginFill(0x666699);
arr[i] = arr[i].split(',');
var xy_commands:Vector.<int> = new Vector.<int>();
var xy_coord:Vector.<Number> = new Vector.<Number>();
for (var j:int=1; j<arr[i].length; ++j) {
xy_coord.push(arr[i][j]*6);
if (j==1) {
xy_commands.push(1); // 1 is a move-to command
var cntry:String = arr[i][j-1] as String; //country name
}
else if (j % 2 == 1) {
xy_commands.push(2); // 2 is a line-to command
}
}
spr.graphics.drawPath(xy_commands, xy_coord);
spr.name = cntry;
xy_Sprites.push(spr);
addChild(spr);
}
return xy_Sprites;
}
Но я не могу добавить прослушиватель событий для каждого спрайта в векторе созданных мной спрайтов:
var str:String = csvLoader.data as String;
var xy_spr:Vector.<Sprite> = drawXYMap(str);
for each (var spr:Sprite in xy_spr) {
spr.addEventListener(MouseEvent.MOUSE_OVER,onOver);
}
function onOver(e:MouseEvent):void {
spr.alpha = .25;
}
Любая помощь будет великолепна.
Спасибо!