我正在尝试为项目创建一个互动的权力游戏地图。我有一张工作地图,有点像。
我想要做的是当我点击地图中的某个区域时,它会打开一个不同的图像,具有不同的可点击区域,如房屋等。
到目前为止,这就是地图的样子:
当我点击一个红色方块时,我想打开一个新的相似图像,只有那个特定的区域。这可以通过在图像顶部添加一个按钮来完成,当我点击它时,它会调用一个将替换图像和东西的类吗?在尝试并搜索如何操作之后,我不知道如何在图像上方获得一个按钮。
任何建议将不胜感激。我对编程很陌生。
这是我到目前为止的代码;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.*;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import javafx.event.*;
import java.util.*;
public class MapDemo extends Application {
public void start (Stage ps) {
ImageView img=new ImageView(getClass().getResource("map.jpg").toExternalForm());
List<County> alltowns = new ArrayList<County>();
alltowns.add(new County("The North",165,265));
alltowns.add(new County("The Vale",265,415));
alltowns.add(new County("Crownlands",280,520));
alltowns.add(new County("Stormlands",280,635));
alltowns.add(new County("Dorne",190,725));
alltowns.add(new County("The Reach",150,600));
alltowns.add(new County("Westerland",135,505));
alltowns.add(new County("Riverlands",180,440));
alltowns.add(new County("Iron Isles",80,400));
img.setOnMouseMoved(e->{
ps.setTitle(e.getX()+", "+e.getY());
});
img.setOnMousePressed(e->{
for(County t : alltowns)
{
double dist=Math.sqrt(Math.pow(t.getX()-e.getX(),2)+Math.pow(t.getY()-e.getY(),2));
if(dist<=20)
System.out.println(t.getName());
}
});
ps.setScene(new Scene(new Group(img),413,796));
ps.show();
}
public static void main(String[] args) {
launch(args);
}
}
//---------------------------------------------
class County {
String name;
double x,y;
public County(String n, double a, double b){
name=n;
x=a;
y=b;
}
public String getName() {
return name;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
}
答案 0 :(得分:0)
如果图像的源是SVG,我会将ID分配给SVG绘图应用程序中各个区域的形状(例如inkscape)。使用SVG2FXML¹等工具,您可以使用FXMLLoader²轻松加载它。通过在简单编辑器中编辑源来添加onClick方法,或者在加载的节点树中搜索id并以编程方式附加处理程序。
这样您就可以避免使用红色方块按钮,并使整个区域对用户的输入作出反应。
¹https://github.com/grmartin/SVG2FXML-Extended
²我不知道转换器是否能够将所有 SVG转换为相应的FXML。