您是否正在为 Processing.org 使用处理标签,对吗?如果我理解你,难道不是制作一个对象,将相对于一个位置的所有数据分组,并在需要时使用 getter 甚至点表示法检索信息?我虽然是这样的:
class Local(){
String name;
String address;
//whatever else...
float mapPosX, mapPosY;
boolean ispressedOver(){
//return if mouse over
}
}
使用 XML 数据创建 Locals,存储在 Local 数组中,并在按下鼠标时获取它
if (localsArray[i].isPressedOver){display(localsArray[i].address);}
这将是一个非常简单的想法示例,除了将 xml 解析为
Place[] places = new Place[4];
void setup() {
size(600, 400);
noStroke();
places[0] = new Place ("one", "That street, 12 - BR", 0.32044, 0.230098, 200, 98);
places[1] = new Place ("two", "This street, 35 - UG", 0.22222, 0.084723, 394,176);
places[2] = new Place ("three", "Other street, 132 - TY", 0.32321, 0.36388, 157, 283);
places[3] = new Place ("four", "Principal street, 672 - OP", 0.909044, 0.7828939, 276, 312);
}
void draw() {
background(75, 16, 160);
for(Place p:places){
p.display();
}
}
class Place {
String name;
String address;
float latitude;
float longitude;
float xPos;
float yPos;
float sz = 40;
Place(String n, String a, float lat, float lng, float x, float y) {
name = n;
address = a;
latitude = lat;
longitude = lng;
xPos = x;
yPos = y;
}
void display() {
fill(200, 210, 100);
rect(xPos, yPos, sz, sz);
if (isOver()) {
String quick = name + " - " + address + " - " + latitude + " - " + longitude ;
fill(0);
text(quick, xPos - textWidth(quick)/2, yPos - 10);
}
}
boolean isOver() {
return (mouseX > xPos && mouseX < xPos + sz && mouseY > yPos && mouseY < yPos + sz);
}
}
在以下链接中,我粘贴了我正在处理的代码。它没有显示任何东西。但我确实获得了 XML 数据并基于它们构建对象。现在输出在控制台中。我不知道是否会有很大帮助。大多数变量名称都是葡萄牙语:P 并且没有注释......但它有效。你可以运行它。它从 Web 中的 API 获取 xml。有两个类,不要理会Query。有必要获取xml,但与您的问题无关。Prop 类是数据持有者。它获取一个 xml 作为参数并将其字段解析为成员变量。目前只有一种方法。toString() 用于向控制台显示数据。
http://pastebin.com/8gGDsFAv