Как сохранить форму (или спрайт) в папку после создания? - PullRequest
0 голосов
/ 11 мая 2011

Я пытаюсь создать карту округа Иллинойс, используя координаты 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;
}

Любая помощь будет великолепна. Спасибо!

1 Ответ

0 голосов
/ 11 мая 2011

Вы можете поместить все свои координаты x, y в структуру данных Vector, а затем использовать метод graphics.drawPath (), чтобы выполнять итерацию по коордам в любое время, когда вы создаете экземпляр округа.

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

Проверьте этот полезный документ от Adobe:

http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WSA8BD9022-BAB1-46d3-9B26-0D9649743C8E.html

PS не забудьте использовать правильные команды рисования для drawPath (). Вы должны быть в состоянии взаимодействовать с ним, как обычно, если вы делаете.

...