gpt4 book ai didi

JAVAFX——这个X/Y位置有东西吗?

转载 作者:太空宇宙 更新时间:2023-11-04 12:44:15 24 4
gpt4 key购买 nike

我想知道 JavaFX 中是否有一些功能可以让您检测某个 getLayoutX/Y() 位置是否有某个对象(或某些东西)?然后还给你。

例如,我有一个节点位于 X0 和 Y1;如果我输入 X0 和 Y1,它将返回该对象,但如果我输入 X1、Y1,那么它将返回 null。

JavaFX 中有类似的东西吗?

最佳答案

为了回答您的直接问题,您可以在根节点上调用内部 API impl_pickNode(...) 来获取最顶层节点。然而,here是它的更干净的版本。或者,如果所有节点只有一个父节点,那么

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

它返回一个Optional,它要么在 X0、Y0 处包装您的对象,要么在该位置没有对象时包装 null。

上面的解决方案是临时的,适合小型项目。然而,如果您想要更好的程序底层设计(我假设是一个游戏?),正如 James_D 指出的那样,您最好使用一个与 View 分离的模型,在其中保存对象并检查它们的位置以查看该位置是否有对象。代码可能如下所示:

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);

关于JAVAFX——这个X/Y位置有东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36500691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com