shp 파일에서 x, y 좌표를 사용하여 일리노이 카운티지도를 만들려고합니다. x, y 좌표 및 카운티 이름을 CSV 파일에 저장 했으므로 ActionScript 3을 통해 읽는 데 아무 문제가 없습니다 (지도가 멋지게 보임). 그러나 미래의 응용 프로그램에서 시간을 절약하기 위해 각각을 저장하려고합니다. 카운티 셰이프를 내 응용 프로그램에서 영구 셰이프로 사용하고 스프라이트 1 (label = 'Champaign')과 같은 레이블을 지정합니다. 이것이 가능한가? 그렇다면 모든 도움을 주시면 감사하겠습니다.작성 후 모양 또는 스프라이트를 폴더에 저장하는 방법?
대체 솔루션을 시도하고 있습니다 : 각 카운티에 대해 새로운 sprite (var spr : Sprite = new Sprite();)를 만들고 spr.graphics.drawPath를 사용하여 그립니다. (spr.name = 'Champaign') 이름을 지정하고 sprite (var xy_sprites : Vector. = new Vector.();)의 벡터로 'push'합니다. 위대한 것입니다,하지만 벡터에있는 각 스프라이트를 통해 루프를 시도하고 해당 카운티의 MouseOver 때 이름을 팝업 해당 Sprite EventListener 추가 할 때 작동하지 않습니다. 스프라이트 데이터 유형이이 문제를 해결하는 올바른 방법이 아니거나 스프라이트에 대한 정보가 누락 되었습니까?
모양을 그리고 벡터에 저장하려면 코드의 일부 :
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;
}
하지만 스프라이트의 벡터의 각 스프라이트에 이벤트 리스너를 추가 할 수없는 것 I 만든 날짜 :
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;
}
도움이 될 것입니다. 감사합니다.
아직 확인하지 않은 경우 다음을 살펴보십시오. http://www.adobe.com/devnet/flash/quickstart/drawing_commands_as3.html – Alex