2011-05-10 3 views
0

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; 
} 

도움이 될 것입니다. 감사합니다.

+0

아직 확인하지 않은 경우 다음을 살펴보십시오. http://www.adobe.com/devnet/flash/quickstart/drawing_commands_as3.html – Alex

답변

0

모든 x, y 좌표를 Vector 데이터 구조에 넣은 다음 graphics.drawPath() 메서드를 사용하여 카운티를 인스턴스화 할 때마다 좌표를 반복 할 수 있습니다.

Shape를 확장 한 클래스를 만든 경우 CSV 파일을 참조하는 Vector를 추가 할 수 있으며 셰이프를 만들 때마다 자동으로 경로가 그려집니다. Adobe의

체크 아웃이 유용한 문서를 :

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

PS가 drawPath에 대한 적절한 드로잉 명령을 사용하는 것을 잊지 마세요(). 그렇게하면 정상적으로 상호 작용할 수 있어야합니다.

관련 문제