【问题标题】:JavaFX canvas 2D game: Shift background vs. paintingJavaFX 画布 2D 游戏:移动背景与绘画
【发布时间】:2016-01-18 06:19:42
【问题描述】:

过去几天我一直在查找教程和资料。我已经做了很多年的程序员,但直到现在我从来没有搞砸过制作游戏。

我正在使用 Java 画布制作一个小型 2D 游戏,但我正在尝试选择正确的方法来绘制瓷砖地图。

就目前而言,我的画布是 640x512,目前它会以每帧速率将所有可见图块绘制到视口上。对我来说,这似乎有点过头了,但我读过的所有内容都以这种方式表明了这一点。

我只是好奇是否有一种方法可以在视口后面绘制整个地图并移动,因此只需绘制一次,然后以每帧速率渲染地图上方的对象。

任何意见将不胜感激。谢谢大家!

【问题讨论】:

  • 我不确定我是否理解您的问题。是不是游戏的视图比游戏世界小,出于性能原因,您只想绘制可见的内容?
  • 对不起,这有点令人困惑,但是游戏的视图比游戏世界小,所以我目前只绘制出于性能原因可见的内容,但我很好奇是否可以将整个区域绘制一次,然后在画布上移动它。这样,每个帧速率唯一被渲染的是实体而不是每个图块。这可能是不可能的..但我不知道,我找不到答案。
  • 我只是注意到在具有缩放功能的游戏中,您可以在放大和缩小时看到地图的整个区域,但不能看到所有实体。一旦您靠近实体,它们就会进入渲染距离并变得可见。所以我试图了解这是如何完成的。也许当你缩小它会增加地图渲染距离,而实体的渲染距离完全不同?我可以试试看。
  • IMO,这个问题太宽泛,无法在 StackOverflow 上得到合理的回答。一些可能(或可能没有)帮助的相关信息是:View of the application javafxHow do you load a tmx/xml file in javafx?Writing a Tile Engine in JavaFX(最后一个链接上的烦人广告)。
  • 谢谢Jewelsea,AlmasB 很好地指出了我的目标,但我将阅读这些链接以获得更多理解。我很感激你的时间。 :)

标签: java canvas javafx 2d


【解决方案1】:

我正在使用 Java 画布制作一个小型 2D 游戏, 但我正在尝试选择正确的方法来绘制瓷砖地图。

JavaFX 渲染基本上有 2 种方式:场景图(多节点,自动渲染)或画布(单节点,手动渲染)。如果屏幕上有很多对象,出于性能原因,首选后者。否则,前者,它提供了更高级别的绘图方法。

就目前而言,我的画布是 640x512,它目前将绘制所有 在视口上每帧速率的可见图块。

使用 JavaFX Canvas 完成此操作非常好。 JavaFX 有一个强大的渲染管道,可以找出渲染场景图的最佳和最有效的方式。如果像素不在活动视口中(在屏幕上实际上可见的部分),则不会渲染。您可以阅读有关 JavaFX 架构的信息here

我只是好奇是否有办法在 viewport 和 shift 所以它只需要绘制一次,然后渲染 地图上方的对象每帧速率。

在较低级别的 JavaFX 甚至更低的 Direct3D (Windows) 中,OpenGL (Mac/Linux) 将为您处理此问题。也许不完全是这种方式,但他们通常会缓存纹理以减轻内存总线的负担。在大多数情况下,当尝试优化渲染时,所采取的步骤实际上会减慢进程,因此从某种意义上说,这些步骤只会妨碍适当的低级优化。因此,会降低整体性能。

总而言之,首先专注于完成应用程序逻辑,然后才担心优化。即使这样,这也是一个敏感问题,必须使用适当的工具来完成,以便您分析和查明应用程序中的瓶颈。

【讨论】:

  • 感谢阿尔马斯。您的回答非常详细,正是我试图理解的。 :)
猜你喜欢
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 2016-03-11
  • 2023-03-07
  • 2013-07-02
  • 1970-01-01
相关资源
最近更新 更多