2017-04-30 6 views
1

프로젝트를위한 양면성 게임 맵을 만들려고합니다. 나는 일하는지도를 가지고있다.JavaFX를 사용한 인터랙티브 GoT지도

지도에서 특정 영역을 클릭하면 집과 같은 다양한 클릭 가능 영역이있는 다른 이미지가 열립니다.

이지도는 지금까지 모습입니다 : 나는 빨간색 사각형을 클릭하면

enter image description here

, 나는 그냥 특정 지역에 새로운 유사한 이미지를 열려면. 이 작업은 이미지 위에 버튼을 추가하여 수행 할 수 있으며 클릭하면 이미지와 물건을 대체 할 클래스가 호출됩니다. 어떻게해야 할지를 시도하고 검색 한 후에 이미지 상단에 단추를 얻는 방법을 모르겠습니다.

모든 조언을 주시면 감사하겠습니다. 나는 프로그래밍에 아주 익숙하다.

여기에 내가 지금까지 가지고있는 코드가 있습니다. 이미지의 원본 SVG 인 경우

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

I는 SVG 드로잉 애플리케이션 (예를 들면 잉크 스케이프)의 다양한 영역의 형상에 ID를 할당한다. SVG2FXML¹과 같은 도구를 사용하면 FXMLLoader²로 쉽게로드 할 수 있습니다. 간단한 편집기에서 소스를 편집하여 onClick 메서드를 추가하거나로드 된 노드 트리에서 ID를 검색하고 프로그래밍 방식으로 핸들러를 연결하십시오.

이렇게하면 빨간색 사각형 버튼이 필요 없으며 전체 영역이 사용자의 입력에 반응하게됩니다.

https://github.com/grmartin/SVG2FXML-Extended

² 컨버터가 해당 FXML에 모든 SVGs 변환 할 경우 나도 몰라를 ¹.