我正在尝试使用shp文件中的x,y坐标创建伊利诺伊州的县地图。我将x,y坐标和县名保存在CSV文件中,通过ActionScript 3读取没问题(地图看起来很棒),但是为了节省我未来应用程序的时间,我想保存每个在我的应用程序中将县形状作为永久形状并给它们标签,即Sprite1(label ='Champaign')。这可能吗?如果是这样,我们将非常感谢任何帮助。
如果这是不可能的,我正在尝试另一种解决方案:我为每个县创建一个新的精灵(var spr:Sprite = new Sprite();),使用spr.graphics.drawPath绘制它,并给它一个name(spr.name ='Champaign')然后'将'推送到sprite的矢量(var xy_sprites:Vector。= new Vector。();)。这将是很好的,但是当我尝试循环遍历向量中的每个sprite并将MouseListener添加到该Sprite以在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;
}
任何帮助都会很棒。 谢谢!
答案 0 :(得分:0)
您可以将所有x,y co-ords放入Vector数据结构中,然后使用graphics.drawPath()方法在您实例化县时迭代co-ords。
如果您创建了一个扩展Shape的类,则可以添加一个引用CSV文件的Vector,每次创建该形状时,它都会自动绘制路径。
查看Adobe的这篇有用文档:
PS不要忘记使用drawPath()的正确绘图命令。如果你这样做,你应该能够正常地与它互动。