游戏的 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
.
本质上,该框架向用户显示 Canvas
,Canvas
通过 BufferStrategy
和 Graphics
上下文以及 [=10] 提供对图形硬件的访问=] 提供 image/image 数据的通用表示,可以将其绘制到 Graphics
上下文(Canvas
)
也许您应该首先查看 JavaDocs for Canvas
, BufferStrategy
, BufferStrategy and BufferCapabilities and 2D Graphics 中的一些示例
我是一个相当新的程序员,我正在尝试使用 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
.
本质上,该框架向用户显示 Canvas
,Canvas
通过 BufferStrategy
和 Graphics
上下文以及 [=10] 提供对图形硬件的访问=] 提供 image/image 数据的通用表示,可以将其绘制到 Graphics
上下文(Canvas
)
也许您应该首先查看 JavaDocs for Canvas
, BufferStrategy
, BufferStrategy and BufferCapabilities and 2D Graphics 中的一些示例