在 JavaFX 游戏中将节点对象用作游戏对象是否有效?

Is it efficient to use Node objects as GameObjects in a JavaFX game?

我得到了这本书:Java 8 Games Development by Wallace Jackson。

本书的一部分教导如何使用 Node 对象(我使用 ImageView class)作为 GameObjects.I 创建 2D Space Invaders 类型的游戏。 每个 GameObject 都有一个包含精灵的 ImageView 成员,ImageView 对象被添加到场景的根部。 这么多节点(外星人)不会占用太多内存吗?

我想知道的是,使用 Node 对象是否有效,或者是否有更有效的方式来表示这些游戏对象?

如果你想在屏幕上显示一些东西,你别无选择,只能使用 Node

来自节点documentation的for语句:

Base class for scene graph nodes. A scene graph is a set of tree data structures where every item has zero or one parent, and each item is either a "leaf" with zero sub-items or a "branch" with zero or more sub-items.

根据@fabian 的评论:

单节点结构也是可以的,使用Canvas:

This link 可以作为检查此方法的良好开端。

原回答,我觉得真是迂腐。 Fabian 是对的,在 JavaFX 中渲染基本上有两种途径。一种是将节点添加到其他节点,将 VBox 添加到组等。第二种是通过 canvas。一些游戏和其他与性能相关的应用程序尽可能避免使用节点和场景图。整个场景图的速度问题有些争议。

并实际回答这个问题:不,在许多情况下,目前使用场景图和节点效率不高。最初的答案试图通过声明这些元素实际上都是节点来混淆。但是,这不是一个有用的答案。 canvas 允许低级绘图操作,例如渲染图像、基元等。它提供混合模式和基于不透明度的操作。但是,要访问某些类型的文本格式、拍摄快照等,深入了解该节点很有用。然后,如果您纯粹使用 canvas 将这些结果转换回图像。