游戏的 BufferedImage、Graphics 和 Canvas 之间的关系

Relationship between BufferedImage, Graphics, and Canvas for games

我是一个相当新的程序员,我正在尝试使用 Java 制作一个非常基本的游戏,您只需在屏幕上移动一个精灵。到目前为止我所做的是制作一个 SpriteSheet class 加载到我的 sprite sheet 并将 spritesheet 的 BufferedImage 保存为 class 的字段和一个 Sprite class 将从该字段中获取子图像(精灵本身)并将其保存为精灵中的字段 class。我已经对此进行了测试,并且一切正常。我知道这可能并不都是典型的或 "correct" 有效的做事方式。我可以自己解决这个问题,但我现在的问题是理解 BufferedImage、Graphics 和 Canvas 之间的关系。我看到一个教程,其中一个人将他的精灵保存为 BufferedImage 并使用它来创建图形。然后,他将此图形绘制到 Canvas 上,并将 Canvas 添加到他的 JFrame 中。他还在其中安装了一个 BufferStrategy 以某种方式连接到他的图形,我根本不明白。每当我尝试根据我的目的调整他的方法时,它都行不通。我已经无数次地查看 javadocs 以了解这些内容,并且我分别获得了它们,但我似乎无法理解它们如何组合在一起以实现我的目标。

简而言之:谁能解释一下 BufferedImage、Graphics 和 Canvas 如何在显示 2D 游戏精灵的上下文中结合在一起,以及如何使用 BufferStrategy 吗?适当和相关的方法?这种方法是否适合渲染大约 15 fps 的移动精灵?等等...我的问题不一定来自缺乏研究或缺乏知识,而是更多来自缺乏理解。

非常感谢,非常感谢任何建议!

  • BufferedImage 是一个 Image 类型,它可以在代码中进行修改,但是,它无法将自己绘制到屏幕上。
  • Canvas 是一个 AWT(重量级)容器,通常用于通过它的 BufferStrategy 提供激活绘画访问。这显示在屏幕上。
  • Graphics 是一个抽象图形库,旨在更轻松地执行跨平台渲染。

Canvas,通过它的 BufferStragegy 提供对 Graphics 实例的访问,它允许您在 Canvas 上绘画(并且通过扩展,屏幕) .您使用此 Graphics 上下文来绘制 BufferedImage

Canvas 本身不能显示在屏幕上,它必须首先包含在某种类型的 window 中,例如 java.awt.Frame.

本质上,该框架向用户显示 CanvasCanvas 通过 BufferStrategyGraphics 上下文以及 [=10] 提供对图形硬件的访问=] 提供 image/image 数据的通用表示,可以将其绘制到 Graphics 上下文(Canvas

也许您应该首先查看 JavaDocs for Canvas, BufferStrategy, BufferStrategy and BufferCapabilities and 2D Graphics 中的一些示例