我正在使用场景图(不是画布)在JavaFX中进行模拟,并且我只在屏幕上绘制我需要的问题。
该模拟中有1000万个节点,但用户只需要在屏幕上同时看到这些节点中的一小部分(最多160,000个节点)。我关注的所有节点都是400x400 ImageViews
。
每个节点都是Group
(节点块)的成员,它拥有大约40,000个节点,因此需要一次显示4个或更少的这些“节点块”。对于要显示的这些“节点块”,它们被添加到静态Pane
上,并且该窗格位于根节点中,这是一个Group
。
所以从第一个父项到最后一个孩子的图表看起来像这样:
根节点Group
\显示Pane
\(很多)Node ChunksGroup
\ <= 40,000 ImageViews
由于显示窗格根据用户输入不断移动(平移和重新缩放),并且节点数量很多,因此应用程序不会以我希望的速度运行。有意义的是,JavaFX无法同时跟踪1000万个节点,因此我的解决方案是从显示窗格中删除所有“节点块”;将它们保存在哈希映射中,直到我需要绘制它们为止。
每个“节点块”都将其LayoutX
和qazxswpo设置为均匀分布在网格中的显示窗格上,如下所示:
LayoutY
在这个例子中,我需要抓住并显示“节点块”7,8,12和13,因为这是用户所看到的。
这是一个手动添加'node chunk'0的屏幕截图。绿黄色是“节点块”1,5和6的放置位置。
我的问题是:由于“节点块”没有被添加到显示窗格中,直到需要它们为止,我无法根据用户看到的显示窗格不断变化的部分来引用它们的布局边界,所以我不知道哪个需要显示“节点块”。
有没有简单的方法来解决这个问题?还是我走错了路? (或两者)谢谢。