我想知道JavaFX中是否有某些功能允许您检测某个getLayoutX / Y()位置是否有某个对象(或某些东西)?然后把它还给你。
例如,我有一个位于X0和Y1的节点;如果我输入X0和Y1,它将返回该对象,但如果我执行X1,Y1,那么它将返回null。
JavaFX中的任何类型?
答案 0 :(得分:0)
要回答您的直接问题,您可以在根节点上调用内部API impl_pickNode(...)以获取最顶层节点。但是,here是它的更清晰版本。或者,如果您的所有节点只有一个父节点,那么
root.getChildren()
.stream()
.filter(n -> n.getLayoutX() == X0 && n.getLayoutY() == Y0)
.findAny();
返回一个Optional
,它将您的对象包装在X0,Y0,或者如果该位置没有对象,则返回null。
上述解决方案是临时性的,适用于小型项目。但是,如果你想要一个更好的程序底层设计(我假设一个游戏?),正如James_D指出的那样,通过使用一个与视图分开的模型会更好,你可以保留你的对象并去通过他们的位置来查看该位置是否有物体。代码可能如下所示:
public Optional<GameObject> getObjectAt(Point2D position) {
return gameObjects.stream()
.filter(obj -> obj.getX() == position.getX()
&& obj.getY() == position.getY())
.findAny();
}
如果在给定位置可以有多个对象,则可以将上述内容推广为:
public List<GameObject> getObjects(Predicate<GameObject> predicate) {
return gameObjects.stream()
.filter(predicate)
.collect(Collectors.toList());
}
你可以打电话:
getObjects(obj -> obj.getX() == X0
&& obj.getY() == Y0
&& obj.getType() == Type.WALL);