2016-04-08 10 views
1

特定のgetLayoutX/Y()位置に何らかのオブジェクト(または何か)があるかどうかを検出できるJavaFXにいくつかの機能があるのだろうか?そしてそれをあなたに返します。JAVAFX - このX/Y位置に何かがありますか?

たとえば、ノードがX0とY1に配置されています。 X0とY1を入力した場合はそのオブジェクトが返されますが、X1、Y1を実行した場合はnullが返されます。

JavaFXでの並べ替えは何ですか?

+0

私の知る限りではAPIのようなものはありません。なぜこれが必要ですか?おそらく、それが何をしようとしているのかを行う別の方法があります... –

+0

うーん、私は自分のスキャナを作ろうとします。 基本的に私はいくつかの衝突検出に取り組んでいます。(playerPosX + X && playerPosY + Y)にオブジェクトがあると、プレーヤーはそこに移動できません。 私はノードの巨大なグリッドを作ることを考えていましたが、それは遅すぎるようでした(私は1000 +オブジェクトのようでした、そしてそれは最小であることを意味しません)。 –

+0

X1 Y0のピクセルが特定の色であるかどうかを確認する方法はありますか? –

答えて

0

直接質問に答えるには、最上位のノードを取得するためにルートノードで呼び出すことができる内部API impl_pickNode(...)があります。しかし、hereはよりクリーンなバージョンです。また、すべてのノードは、X0であなたのオブジェクトをラップY0、またはその位置にオブジェクトが存在しない場合はnullラップのどちらかというOptionalを返すだけで片方の親、そして

root.getChildren() 
    .stream() 
    .filter(n -> n.getLayoutX() == X0 && n.getLayoutY() == Y0) 
    .findAny(); 

を持っている場合。

上記のソリューションは特別なもので、小さなプロジェクトでは問題ありません。しかし、James_Dが指摘したように、プログラムのより良い基本設計(私はゲームを前提としていますか?)を望むなら、あなたのオブジェクトを保持し、その位置にオブジェクトがあるかどうかを確認します。そのことができます

public List<GameObject> getObjects(Predicate<GameObject> predicate) { 
    return gameObjects.stream() 
         .filter(predicate) 
         .collect(Collectors.toList()); 
} 

:上記のこのようなものに一般化することができ、指定された位置にある複数のオブジェクトを持つことが可能である場合

public Optional<GameObject> getObjectAt(Point2D position) { 
    return gameObjects.stream() 
         .filter(obj -> obj.getX() == position.getX() 
            && obj.getY() == position.getY()) 
         .findAny(); 
} 

:コードは次のようになります。電話:

getObjects(obj -> obj.getX() == X0 
       && obj.getY() == Y0 
       && obj.getType() == Type.WALL); 
関連する問題