交互式JavaFX地图

交互式JavaFX地图,java,javafx,interactive,Java,Javafx,Interactive,我正在尝试为一个项目创建一个互动的权力地图游戏。我有一张工作地图 我想做的是,当我点击地图上的某个区域时,它会打开一个不同的图像,有不同的可点击区域,如房屋等 这是迄今为止地图的外观: 当我点击一个红方块时,我想打开一个新的类似的图像,只有那个特定的区域。这可以通过在图像顶部添加一个按钮来实现吗?当我单击该按钮时,它将调用一个类来替换图像和其他内容?我不知道如何得到一个按钮的图像顶部,在尝试和搜索如何做到这一点 如有任何建议,将不胜感激。我对编程很陌生 这是我到目前为止的代码 impor

我正在尝试为一个项目创建一个互动的权力地图游戏。我有一张工作地图

我想做的是,当我点击地图上的某个区域时,它会打开一个不同的图像,有不同的可点击区域,如房屋等

这是迄今为止地图的外观:

当我点击一个红方块时,我想打开一个新的类似的图像,只有那个特定的区域。这可以通过在图像顶部添加一个按钮来实现吗?当我单击该按钮时,它将调用一个类来替换图像和其他内容?我不知道如何得到一个按钮的图像顶部,在尝试和搜索如何做到这一点

如有任何建议,将不胜感激。我对编程很陌生

这是我到目前为止的代码

   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;


    }

}
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.image.*;
导入javafx.scene.*;
导入javafx.scene.control.*;
导入javafx.scene.layout.*;
导入javafx.stage.stage;
导入javafx.event.*;
导入java.util.*;
公共类MapDemo扩展了应用程序{
公共空间启动(阶段ps){
ImageView img=newImageView(getClass().getResource(“map.jpg”).toExternalForm());
List alltowns=new ArrayList();
新增(新县(“北部”,165265));
添加(新县(“山谷”,265415));
新增(新县(“皇冠地”,280520));
新增(新县(“风暴地”,280635));
新增(新县(“多恩”,190725));
新增(新县(“Reach”,150600));
新增(新县(“韦斯特兰镇”,135505));
新增(新县(“河岸镇”,180440));
新增(新县(“铁岛”,80400));
img.setOnMouseMoved(e->{
ps.setTitle(e.getX()+”,“+e.getY());
});
img.setOnMousePressed(e->{
适用于(t县:所有城镇)
{
double dist=Math.sqrt(Math.pow(t.getX()-e.getX(),2)+Math.pow(t.getY()-e.getY(),2));

如果(dist如果图像源在SVG中,我将为SVG绘图应用程序(例如inkscape)中各个区域的形状分配ID。使用诸如SVG2FXMLª之类的工具,您可以使用FXMLLoader²轻松加载它。可以通过在简单编辑器中编辑源来添加onClick方法,也可以在加载的节点树中搜索ID并通过编程方式附加处理程序

通过这种方式,您可以避免使用红方块按钮,并使整个区域对用户的输入做出反应


²我不知道转换器是否能够将所有SVG转换为相应的FXML。

如果图像源在SVG中,我将为SVG绘图应用程序(例如inkscape)中各个区域的形状分配ID。使用诸如SVG2FXMLª之类的工具,您可以使用FXMLLoader²轻松加载它。可以通过在简单编辑器中编辑源来添加onClick方法,也可以在加载的节点树中搜索ID并通过编程方式附加处理程序

通过这种方式,您可以避免使用红方块按钮,并使整个区域对用户的输入做出反应

²我不知道转换器是否能够将所有SVG转换为相应的FXML