0

因此,我们需要实现的是一个具有多个节点(最多数百个)的树形菜单。一个节点可以有子节点,然后可以展开/折叠。还有一个鼠标悬停的背景闪电和鼠标选择的背景闪电。每个节点都有一个框、一个图标和一个文本,可以很大,占据整个屏幕宽度。

这是一个已经工作的解决方案的示例:

在此处输入图像描述

基本上我是:

  • 第一次渲染文本,只是为了获得可能的背景突出显示的长度

  • 渲染框和图标纹理(是的,我知道,它们现在是颠倒的)

  • 第二次渲染文本,首先是粗体,然后是正常的

该解决方案实际上具有相对可接受的性能影响。

然后我们尝试了另一种方法,即使用g Graphic java 通过绘制树形菜单并将其作为 bufferedImage 返回以在最后创建一个大纹理渲染它。所有这些显然都是在每个节点折叠/展开以及每次鼠标移动时完成的。

这表现得更好,Java 似乎在处理旧的 bufferedImages 时遇到了一些大麻烦。事实上,内存消耗不断增加,强制垃圾收集通过减慢它只会略微增加内存,但仍然......此外,性能下降,因为每次都调用垃圾收集器并且看起来一点也不轻。

所以我要问你的是:哪种策略最能满足我的需求?

在不同的纹理上渲染每个节点也可能是可行的(实际上是三个:一个正常,一个具有用于鼠标悬停的浅色背景,最后一个具有用于鼠标选择的正常背景),然后在每个 display() 处将所有这些纹理与当前树菜单状态?

4

1 回答 1

1

对于 Java 方法:如果 BufferedImage 的大小没有改变(树控件的宽度/高度),你不能重用它来避免垃圾收集吗?

对于 GL 方法,请确保最小化纹理开关。你如何渲染文本?您可以拥有一个包含所有普通和粗体字母的大纹理,并且为每个字母使用不同的纹理坐标。

于 2012-09-24T14:14:52.050 回答