2017-04-30 8 views
1

私はプロジェクトの対話型ゲームのマップを作成しようとしています。私は実用的な地図を持っています。JavaFXを使用したインタラクティブGoTマップ

私がしたいことは、マップ内の特定の領域をクリックすると、別の画像が開き、家などのクリック可能な領域が異なります。

これは、マップがこれまでに次のようになります。

enter image description here

私は赤い四角をクリックすると、私はちょうどその特定の領域で、新しい類似する画像​​を開きたいです。これは、画像の上にボタンを追加することでできます。クリックすると、画像やものを置き換えるクラスが呼び出されます。私はどのようにそれをやってみると、画像の上にボタンを得る方法がわからない。

何かアドバイスをいただければ幸いです。私はプログラミングには全く新しいです。

これまでのコードは次のとおりです。

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

画像のソースはSVGであれば、私はSVG描画アプリケーション(例えば、Inkscapeの)における種々の領域の形状にIDを割り当てることになります。 SVG2FXML¹のようなツールを使用すると、FXMLLoader²で簡単に読み込むことができます。単純なエディタでソースを編集してonClickメソッドを追加するか、ロードされたノードツリーでIDを検索し、ハンドラをプログラム的にアタッチします。

この方法で、赤い四角形のボタンが不要になり、領域全体がユーザーの入力に反応するようになります。

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

²コンバータは、対応するFXMLにすべて SVGsを変換することができる場合、私は知りませんが¹しました。

関連する問題